2014-01-17 75 views
1
#include <stdio.h> 

void reverse(char *str){ 
    char * end = str; 
    char tmp; 
    if (str){ 
     while(*end){ 
      ++end; 
     } 
     --end; 
     while (str < end){ 
      tmp = *str; 
      *str++ = *end; // segmentation error 
      *end-- = tmp; 
     } 
    } 
} 
    int main() 
    { 
    char *name = "erogol" 
    reverse(name); 
    //printf("%s\n", name); 

    return 0; 
    } 

爲什麼你認爲分割錯誤發生在我評論的地方?爲什麼你認爲分割錯誤發生在該代碼?

回答

2

因爲name(作爲字符串文字)是隻讀的。

使用

char name[] = "erogol"; 

看來你是使用調試器,也可以考慮使用valgrind(有時它提供了更多的細節):

==4040== Process terminating with default action of signal 11 (SIGSEGV) 
==4040== Bad permissions for mapped region at address 0x40065C 
==4040== at 0x400551: reverse (demo.c:16) 
==4040== by 0x40058E: main (demo.c:24) 
+0

就是這兩個 – erogol

+0

@erogol之間的技術差異, http://stackoverflow.com/a/12795948/1606345 –

1

因爲您修改了字符串文字。

即使他們的類型是char[]而不是char const[]您無權修改它們。

相關問題