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
字符串字面值不是'char *',但是由於舊的C細節,編譯器無論如何都必須接受。對任何字符串文字使用'const char *',或者你可以從文字初始化一個'char s []'數組。 – aschepler
同樣的問題,相同的功能,相同的錯誤[爲什麼這個C代碼導致分段錯誤?](http://stackoverflow.com/questions/1614723/why-is-this-c-code-causing-a-segmentation-故障) – AnT