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*
不足以返回本地字符指针吗?我是否必须在函数中使用静态?
答案 0 :(得分:5)
我是否必须在函数中使用静态?
是。 const
只是返回值的限定符,向returnStr
的调用者发出信号,告知他们不应该修改函数的结果。它不会改变time
的临时字符。
答案 1 :(得分:4)
当returnStr函数终止时,它的堆栈帧被释放 - 所以无论任何本地指针指向的是现在的随机数据。如果要返回指针,则必须在堆上分配它,例如使用malloc。
答案 2 :(得分:3)
time
对象仅在returnStr
运行之前存在。一旦它返回到调用它的函数,它就会消失,任何指向它的指针都是无效的。简而言之,在C中你不能从函数返回一个数组,你只能返回一个指针。这就是标准库C函数根本不分配字符串的原因,你必须传入一个字符串并指定它的大小,它将填充它或错误输出。