函数返回指向字符串不起作用的指针

我想知道为什么以下工作不正确? 虽然我尝试了其他方法,但为了更清晰,我想知道这里发生的问题。

char *fuc(char *s) { char t[10]; int r=0; while(s[r] != '\0') { t[r] = s[r]; r++; } t[r]='\0'; return &t[0]; } main() { char s[]="abcde"; char *p; p=func(s); puts(p); } 

在你的fuc()char t[10]; 是一个局部变量。 一旦你的函数完成执行,就不存在t 。 因此,在调用者中,返回的指针变为无效。

使用返回的指针进一步导致未定义的行为 。

如果要从fuc()返回指针,则需要使用动态内存分配函数,如malloc()和family。 在这种情况下,在调用函数内部,一旦你完成了使用内存,你需要注意free()分配内存。

也就是说,从逻辑的角度来看,在你的fuc() ,你在没有检查边界的情况下迭代t 。 在使用索引之前,您应该检查t的大小。

此外, main()不是函数的正确forms。 至少,它应该是int main(void)

数组t是函数func()本地函数,因此一旦退出函数,就无法访​​问数组t ,这将导致未定义的行为。

你应该在堆上分配内存。

 char *t = malloc(10); 

现在你可以从函数func()返回一个指针