以下两种初始化字符串的方式并返回
char *get_str():
char *str = "LBWNB";
return str
char *res = get_str();
char *get_str():
char str[] = "LBWNB";
return str
char *res = get_str();
后者由于是数组,所以返回后给外部的 res 变量,res 会变成 NULL,(函数执行完毕后释放了)
而前者这样的申请方式,返回给外部 res 变量,res 可以正常访问字符串 “LBWNB”
值得一提的是,char *str = "LBWNB";
这样执行,字符串是被存在**(全局)静态数据区**的,其只可以被访问,不可以被修改,如果执行 *(str+1) = 'v'
,其编译可以通过,但在执行过程中,可能报segmentfault
。
而 char str[] = "LBWNB";
执行之后,字符串数据存在栈区,可以被修改.
-
顺便安利一个C的在线编译网站:https://godbolt.org/
-
其余详细内容可查看: https://blog.youkuaiyun.com/lanyang123456/article/details/6669926