2017-04-11 3 views
1

ich einen Stringliteral mit der Verwendung von Zeigern auf umkehren versuchen, obwohl mein Code SEGSIGV Signal auf *head=*tail Linieein Zeichenfolgenliteral in C Reversieren mit Zeigern

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; 
} 

Ich weiß nicht empfangen, wenn ich versuche um auf das eingeschränkte Speichersegment zuzugreifen.

+2

Stringliterale nicht beschreibbar sein könnte, und ihnen zu schreiben gibt nicht definiertes Verhalten. Sie müssen stattdessen entweder ein 'char'-Array verwenden oder die umgekehrte Zeichenfolge an einen anderen Speicherort schreiben (der schreibbar ist). – Dmitri

+0

String-Literale sind normalerweise schreibgeschützt, und jeder Versuch, einen zu ändern, führt zu undefiniertem Verhalten und normalerweise zu einem Absturz. Tu es nicht! –

Antwort

1

Ja, Sie versuchen, schreibgeschützten Speicher zu ändern.
Sie können eine konstante Zeichenfolge nicht neu anordnen.

Mit einer einfachen Änderung können Sie das Problem beheben:

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

(ein Array anstelle eines Zeigers)