-1

重複の可能性:
C または C++ で文字列を元の位置に戻すにはどうすればよいですか?
この C コードがセグメンテーション違反を引き起こしているのはなぜですか?
c で char ポインタの値を変更すると segfault が生成される

非常に単純なコード例の実行

#include <stdlib.h>
#include <iostream>

char* last_char(char* s){
  char* last = s;
  while (*last) ++last;
  return last;
}

char* in_place_reverse(char* s) {
  char* left = s;
  char* right = last_char(s);
  char temp;

  while( left < right ) {
    temp = *left;
    *left = *right;
    *right = temp;

    left++;
    right--;
  }

  return s;
}

int main(){
  char * s = "letters\n";
  std::cout << in_place_reverse(s);
}

私が得るすべての時間

 Segmentation fault

しかし、私の観点からは、コード内で違法なことは何もしていません。何が問題なのかを判断するのを手伝ってください。

PS私はコンパイルします

g++ example.c
4

2 に答える 2

2

文字列リテラルを変更しようとしていますが、文字列リテラルは変更できません。

char s[] = "letters\n";代わりに使用

于 2012-06-06T17:50:20.640 に答える