2017-04-11 48 views
1

我試圖扭轉一個字符串與指針的使用Ç文字,雖然我的代碼收到*head=*tail線SEGSIGV信號沖銷字符串的指針

char* reverse(char* input, int n) { 
    char temp; 
    char* head= input; 
    char* tail= &input[n-1]; 
    while(head<tail){ 
     temp=*head; 
     *head=*tail; 
     *tail=temp; 
     head++; 
     tail--; 
    } 
    return input; 
} 


int main(void){ 
    char* sentence= "All work and no play makes jack a dull boy"; 
    reverse(sentence, strlen(sentence)); 
    printf("%s", sentence); 
    return 0; 
} 

我不知道如果我想訪問受限制的內存段。

+2

字符串文字可能不寫,寫他們給出了不確定的行爲。您需要使用'char'數組,或者將反轉的字符串寫入不同的位置(這是可寫的)。 – Dmitri

+0

字符串文字通常是隻讀的,任何修改它的嘗試都會導致未定義的行爲,通常會導致崩潰。不要這樣做! –

回答

1

是的,您正試圖修改只讀內存。
您不能重新排列常量字符串。

通過簡單的改變就可以解決這個問題:

char sentence[] = "All work and no play makes jack a dull boy"; 

(使用數組,而不是一個指針)