0

可能重复:
为什么这个 C 代码会导致分段错误?

我正在编写一个简单的字符串反向脚本。

我添加了打印语句进行调试。在 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
4

1 回答 1

3

char* s = "Hello world";

需要是

char s[] = "Hello world";

您的原始文件正在尝试更改不允许更改的常量内存,因此您需要分配空间并使用字符串对其进行初始化

于 2012-12-11T00:47:55.220 回答