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 に答える