2010-10-13 85 views
0

我這段代碼是轉儲核心:奇怪的核心轉儲問題

int main(int argc,char *argv[]) 
{ 
    char *p = "onnm"; 
    printf("%c\n",++*(p++)); 
    return 0; 
} 

什麼可能是在printf的行中的原因是什麼?

+0

你的調試器應報告是什麼原因導致你的時候加載它的核心轉儲 - 也就是說,它是一個訪問衝突,分段錯誤,偏離的讀等 – Crashworks 2010-10-13 22:43:30

+0

參見[這個問題](HTTP://計算器。 COM /問題/ 2096448)。 – 2010-10-13 22:45:05

回答

3

字符串文字是隻讀的,您不能更改它們。

使用例如char p[] = "onnm";

1

您可以像這樣的代碼,因爲C. 例如「在語言​​標準不一致」的,

const char const_buff[] = { 'o','n', 'n', 'm', '\0' }; // OK 

char* pArray = const_buff;   // not OK 

在它應該不允許你編譯同一行,

char *p = "onnm"; 

但是你可以編譯,所以你可以改變一個只讀字符串的錯誤。

++ * (p++)