c – 带字符串文字的C空指针

c – 带字符串文字的C空指针,第1张

概述使用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 len 使用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("%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空指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存