c – 带字符串文字的C空指针
发布时间:2020-12-16 10:29:01 所属栏目:百科 来源:网络整理
导读:使用ARM,C编译器,我可以成功编译并运行以下代码: 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("%sn",
使用ARM,C编译器,我可以成功编译并运行以下代码:
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("%sn",myString); myfunc(2); printf("%sn",myString); } 为什么这样做? 指针不应该是NULL指针吗? 至少,不应该在只读内存位置分配字符串文字吗? 编辑:它是一个C编译器 EDIT2:为什么在myfunc超出范围后,字符串文字存在于静态范围内?字符串文字是否未在堆栈中声明?什么时候他们被解除分配? 谢谢! 解决方法
这两个字符串在只读存储器中分配,并且完全不同.但是你用一个相同的指针指向它们中的每一个……什么是不明白的?
记住,char *只是一个指针.它是可变的(非常数). char* p = 0; p = "Hello"; //OK p = "Jo" //OK; p[0] = 'X' //OOPS,now THIS is bad (undefined behavior) 编辑后: 不,字符串文字具有静态存储持续时间(与所有其他文字不同),它们不是在堆栈上创建的.它们将存在直到程序终止. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |