C语言作用域的问题...

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:08:56
突然有点乱...
这样一段代码

char * pStr();

main()
{
printf("%s\n", pStr());
}

char * pStr()
{
char pString[80];
scanf("%s", pString);
return pString;
}

这样也能输出我输入的内容, 可是这样会不会出现别的数据覆盖掉pString指向的内容的可能, 是不是应该用malloc这样再在主函数里释放, 这样更安全?

是的,如果你用malloc会比现在这样做好很多。
pString在函数中是申请在栈中的数据,生命周期其实就是你的子函数结束。
存在危险、
用malloc则申请在堆中,也就是说它的生命周期是整个函数的周期。这样更安全。正规

你这样肯定是可以在其他地方访问pString的内容..因为你pStr函数返回了pString的首地址..
只要调用这个函数,在使用保存返回的首地址就可以在接下来的操作不通过pStr函数操作pString的内容了..除非在接来的操作pString被覆盖..
你可以使pStr不返回值..吧操作都局限在pStr函数里面,这样在外部就不会出现安全的问题..

已经晚了。pStr()返回后pString[]也就不该用了。在pStr()里malloc吧。

准确说不是作用域(scope)(因为你没有继续用名字pString),而是生命期(extension)。

不会的