
返回临时变量指针会造成不可预料的错误,但是下面两个例子怎么会出现不同的清空
//错误的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;
} 展开
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;
} 展开
展开全部
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哪些为真哪些为假,搞清楚这个问题,你的问题自然就明白了。
char* str = {"abcd"};这是定一个指针,指向一个字面常量,abcd这个字符串是在全局区,所以返回的地址在函数结束后仍然可以用。
char str1[] = "abcd";
char str2[] = "abcd";
char *str3 = "abcd";
char *str4 = "abcd";
问:str1==str2, str3==str4, str1==str3哪些为真哪些为假,搞清楚这个问题,你的问题自然就明白了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询