返回临时变量指针会造成不可预料的错误,但是下面两个例子怎么会出现不同的清空

//错误的char*get_str(void){charstr[]={"abcd"};returnstr;}intmain(intargc,char*argv[]){ch... //错误的
char* get_str(void)
{
charstr[] = {"abcd"};
returnstr;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf("%s\n", p);
return 0;
}

//为什么下面的这个是正确的
char* get_str(void)
{
char* str = {"abcd"};
return str;
}
int main(intargc, char* argv[])
{
char* p = get_str();
printf("%s\n", p);
return 0;
}
展开
 我来答
dd爱睡觉的熊
2016-05-25 · TA获得超过146个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:115万
展开全部
char str[] = {"abcd"}; 这个定义数组,是在函数栈上分配的空间,函数调用结束,这个空间自动释放了,返回这个首地址,结果是不可预料的;

char* str = {"abcd"};这是定一个指针,指向一个字面常量,abcd这个字符串是在全局区,所以返回的地址在函数结束后仍然可以用。

char str1[] = "abcd";
char str2[] = "abcd";
char *str3 = "abcd";
char *str4 = "abcd";
问:str1==str2, str3==str4, str1==str3哪些为真哪些为假,搞清楚这个问题,你的问题自然就明白了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式