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

标签 c

我想知道为什么以下不能正常工作?虽然我尝试了其他有效的方法,但为了更清楚起见,我想知道这里发生的问题。

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/

相关文章:

c - 调用always_inline 时内联失败 '_mm256_add_epi32' : target specific option mismatch

c - Xcode c bad_acces 代码 2 错误

C编译静态局部变量和静态全局变量的区别

c - El Gamal 指数查找算法

c++ - 希望开发自己的音乐库程序

c - 使用 C99 的 Netbeans C GCC

C 这个函数的作用是什么?

将堆指针传递给函数时,cppcheck 无法检测到泄漏?

c++ - 我们什么时候需要提及/指定数字文字的整数类型?

c - 有没有更好的方法来改变结构中的每个变量,C