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 - 如何获取OCI_ATTR_SQLFNCODE *before* OCIStatementExecute()语句类型?

c - 如何通过 UNIX 命令行以编程方式压缩文件?

c - 为什么在不给出任何条件的情况下将任何标识符放在条件语句中?

c - 我应该如何避免与 C 中包含的库发生命名冲突?

c - 如何保护 RCU 阅读器部分免于抢占?

计算器 C : inputting both operator signs and integers to perform calculations

c - 在 Linux 内核模块中读/写文件

c - 以下代码中 XCode 输出和 gcc 输出之间差异如此之大的原因是什么?

c++ - LIBC 的 mktime 函数对相同的输入返回不同的值