我想知道为什么以下不能正常工作?虽然我尝试了其他有效的方法,但为了更清楚起见,我想知道这里发生的问题。
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
就不存在了。因此,在调用者中,返回的指针变得无效。
使用返回的指针进一步导致 undefined behaviour .
如果你想从fuc()
返回指针,你需要利用动态内存分配功能,如 malloc()
和家人。在这种情况下,在调用函数内部,一旦使用完内存,就需要注意 free()
- 也分配了内存。
也就是说,从逻辑的角度来看,在你的 fuc()
里面,您正在迭代 t
没有对边界进行任何检查。您应该检查 t
的大小在使用索引之前。
此外,main()
不是该函数的正确形式。至少应该是int main(void)
.
关于c - 返回指向字符串的指针的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32352174/