的所有
您定義string
首先指向一個常量字符串中,存儲在只讀存儲器:
char * string = "Simulated Annealing = 12847369";
然後你發現這個的=
第一次出現並將指針指向它在value
:
char * value = strchr(string, '=');
所以value
現在指向一個只讀存儲器或value = NULL
,所以這是一個已經未定義行爲的一行:
*(value ++) = 0; // assign value to read-only memory
如果讓我們說你寫
char string[] = "Simulated Annealing = 12847369";
你在陣列中存儲此字符串在堆棧上,然後你可以寫信給它。現在
,你的問題
您的代碼不會打印到新的生產線,如果你之前寫的東西,你會看到:
char string[] = "Simulated Annealing = 12847369";
char * value = strchr(string, '=');
*(value ++) = 0;
printf("First line");
printf("%s ==== %s", value, string);
爲了找到第一發生的空間字符,使用strchar(karmarkar, ' '):
。
再次,當您使用strchr
檢查返回值是否爲NULL
,因爲它可能是,如果它確實是NULL,那麼您的程序可能會崩潰。(取消引用非法地址)
此代碼具有未定義的行爲。 – 2011-05-14 11:38:23
你可以用char * string = strdup(「....」)修復它;' – Alexandru 2011-05-14 11:40:25