带有字符串文字的C空指针

J T*_*J T 3 c c++ string pointers arm

使用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);
}
Run Code Online (Sandbox Code Playgroud)

为什么这样做?

指针不应该是NULL指针吗?

至少,不应该在只读内存位置分配字符串文字吗?

编辑:它是一个C++编译器

EDIT2:为什么在myfunc超出范围后,字符串文字存在于静态范围内?字符串文字是否未在堆栈中声明?什么时候他们被解除分配?

谢谢!

Arm*_*yan 7

这两个字符串在只读存储器中分配,并且完全不同.但是你用一个相同的指针指向它们中的每一个......什么是不明白的?

记住,char*只是一个指针.它是可变的(非常数).

char* p = 0;
p = "Hello"; //OK
p = "Jo" //OK;
p[0] = 'X' //OOPS, now THIS is bad (undefined behavior)
Run Code Online (Sandbox Code Playgroud)

编辑后:

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