使用的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已超出范围后?字符串文字是否未在堆栈中声明?何时它们被释放?
谢谢!
你能澄清你的问题吗? “myString”不再为NULL的原因是您已分配给它。 – 2011-03-17 17:04:49
请参阅EDIT2。感谢大家。 – 2011-03-17 17:06:48
文字可能分配在只读存储器中。第一个的形式类型是'const char [12]'。你可以将它的地址分配给一个'char *',因为它只允许在C中使用。为了正确,你应该使用'const char *'。 – 2011-03-17 17:12:10