static char * myString = 0;voID myfunc(int x){ if (x <= 0) myString = "Hello World"; else myString = "This is a different string with a different length";}int main(){ myfunc(-1); printf("%s\n",myString); myfunc(2); printf("%s\n",myString);}
为什么这样做?
指针不应该是NulL指针吗?
编辑:它是一个C编译器
EDIT2:为什么在myfunc超出范围后,字符串文字存在于静态范围内?字符串文字是否未在堆栈中声明?什么时候他们被解除分配?
谢谢!
解决方法 这两个字符串在只读存储器中分配,并且完全不同.但是你用一个相同的指针指向它们中的每一个……什么是不明白的?记住,char *只是一个指针.它是可变的(非常数).
char* p = 0;p = "Hello"; //OKp = "Jo" //OK;p[0] = 'X' //OOPS,Now THIS is bad (undefined behavior)
编辑后:
不,字符串文字具有静态存储持续时间(与所有其他文字不同),它们不是在堆栈上创建的.它们将存在直到程序终止.
总结以上是内存溢出为你收集整理的c – 带字符串文字的C空指针全部内容,希望文章能够帮你解决c – 带字符串文字的C空指针所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)