我在某處找到了一個問題...這裏是它的解釋和答案。簡單的C代碼在gcc上給出分段錯誤
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s %s",p,p1);
}
Answer:
ibj!gsjfoet
Explanation:
++*p++ will be parse in the given order
* P是在當前由p指向的位置值將被帶到
++ * p中檢索到的值將增加
時;遇到的位置將遞增,即p ++將被執行
因此,在while循環中,由p指向的初始值是'h',通過執行++ * p將其更改爲'i',並且指針移動到點,'a'類似地改變爲'b'等等。同樣的空格被轉換爲'!'。因此,我們在p中獲得的值變成「ibj!gsjfoet」,並且由於p到達'\ 0'並且p1指向p,因此p1不會打印任何東西。
我發現P1上的解釋有問題,我認爲P1應該打印「海朋友」,並且輸出的p是正確的。
,但是當我試圖運行gcc編譯相同的代碼,它給segmentatiion故障
這裏是我試圖運行的確切代碼..
#include<stdio.h>
int main()
{
char *p="hai friends",*p1;
p1=p;
while(*p !='\0') ++*p++;
printf("%s %s",p,p1);
return 0;
}
如果可能的話編輯標題,我無法找到合適的標題來更清楚地解釋情況。
編輯:
我試圖通過Mysticial的建議運行修改後的代碼,但我認爲輸出應該是什麼 -
ibj!gsjfoet hai friends
,因爲我僅增大P0但P1應作爲它的起始位置,即在字符串的起始地址。請如果有人能解釋它在哪裏,我得到它錯了?
這*必須*重複。懶得去搜索它。 – Tom 2011-12-30 18:01:26