2012-12-11 60 views
0

可能重複:
Why is this C code causing a segmentation fault?用繩子問題扭轉實施

我寫一個簡單的字符串反轉的腳本。

我添加了打印語句來調試。我在Error1之前不斷收到運行時異常。但我似乎無法弄清楚原因。

這裏是我的代碼:

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int strlen(char* s){ 
    int i = 0; 
    while(*s != '\0'){ 
    i++; 
    s++; 
    } 
    return i; 
} 

void reverse(char* src){ 

    char* dest = src+strlen(src)-1; 
    char temp; 

    while(src < dest){ 
    temp = *src; 
    cout << "Error0" << endl; 
    *src = *dest; 
    cout << "Error1" << endl; 
    *dest = temp; 
    cout << "Error2" << endl; 
    src++; 
    dest--; 
    } 

} 

int main (void){ 

    char* s = "Hello world"; 
    cout << s << endl; 
    int i = strlen(s); 
    cout << i << endl; 
    reverse(s); 
    cout << s << endl; 

    getchar(); 
    return 0; 
} 

這裏是我的輸出:

  Hello world 
      11 
      Error0 
+0

字符串字面值不是'char *',但是由於舊的C細節,編譯器無論如何都必須接受。對任何字符串文字使用'const char *',或者你可以從文字初始化一個'char s []'數組。 – aschepler

+0

同樣的問題,相同的功能,相同的錯誤[爲什麼這個C代碼導致分段錯誤?](http://stackoverflow.com/questions/1614723/why-is-this-c-code-causing-a-segmentation-故障) – AnT

回答

3

char* s = "Hello world"; 

需求是

char s[] = "Hello world"; 

你的信號試圖改變你不允許改變的恆定內存,所以你需要分配空間並用字符串初始化它