const char* test(bool i)
{
const char t[] = "aa\n";
const char* p = "bbb\n";
if(i)
return p;
return t;
}
int main(array<System::String ^> ^args)
{
printf(test(true));
printf(test(false));
return 0;
}
返回類的東西:功能和返回爲const char *
bbb
%^&$^$%
顯然,測試(假)返回一個指向一個局部變量。問題是,p也是局部變量。爲什麼在函數返回後沒有清除「bbb \ n」的內存。我認爲const char []與const char *的解釋方式相同,但它看起來並不正確。
該標準是否規定了字符串文字的存儲方式?也就是說,字符串(在共同的經驗中)在只讀存儲器中存在,直到整個程序結束才存在,這是一個標準的強制性行爲嗎?如果不是,它可能存在一個編譯器,將字符串文字放入函數堆棧中...爲什麼不是(如果標準沒有規定任何關於它的內容) – ShinTakezou
@ShinTakezou:第3.7.1節「所有變量沒有動態存儲時間,沒有線程存儲時間,並且本地沒有靜態存儲時間,這些實體的存儲應持續到程序的持續時間。「 –
@BenVoigt謝謝。即使是「確切」的字符串文字也不是變量,所以本節不適用於它們。但我認爲這是一個「細微差別」,該部分也提到了字符串文字(也)。 – ShinTakezou