使用的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