gpt4 book ai didi

c++ - 带有字符串文字的 C 空指针

转载 作者:太空狗 更新时间:2023-10-29 19:44:41 25 4
gpt4 key购买 nike

使用 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"; //OK
p = "Jo" //OK;
p[0] = 'X' //OOPS, now THIS is bad (undefined behavior)

编辑后:

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

关于c++ - 带有字符串文字的 C 空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5342511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com