使用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);
}
为什么这个代码可以工作?
指针不应该是一个空指针吗?
至少,字符串常量应该被分配在只读内存位置上吧?
编辑:这是一个C++编译器
编辑2:为什么字符串常量在myfunc函数已经结束后仍然存在于静态作用域中?字符串常量不是在栈上声明的吗?它们何时被释放?
谢谢!
const char[12]
。你可以将它的地址赋给char*
,因为这在 C 中曾经是允许的。但正确的做法是使用const char*
。 - Bo Persson