加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)

编辑后:

不,字符串文字具有静态存储持续时间(与所有其他文字不同),它们不是在堆栈上创建的.它们将存在直到程序终止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读