在C中返回本地指针

时间:2011-11-22 00:21:16

标签: c

const char* returnStr()
{
    char time[40] = {"France"};
    char* time1;

    time1 = time;

    return time1;
}

int main(int argc, char* argv[])    {
    printf ("return String is %s\n",returnStr());
}

此代码返回一些垃圾字符。 const char*不足以返回本地字符指针吗?我是否必须在函数中使用静态?

3 个答案:

答案 0 :(得分:5)

  

我是否必须在函数中使用静态?

是。 const只是返回值的限定符,向returnStr的调用者发出信号,告知他们不应该修改函数的结果。它不会改变time的临时字符。

答案 1 :(得分:4)

当returnStr函数终止时,它的堆栈帧被释放 - 所以无论任何本地指针指向的是现在的随机数据。如果要返回指针,则必须在堆上分配它,例如使用malloc。

答案 2 :(得分:3)

time对象仅在returnStr运行之前存在。一旦它返回到调用它的函数,它就会消失,任何指向它的指针都是无效的。简而言之,在C中你不能从函数返回一个数组,你只能返回一个指针。这就是标准库C函数根本不分配字符串的原因,你必须传入一个字符串并指定它的大小,它将填充它或错误输出。