1

重複の可能性:
文字列への書き込み時にセグメンテーション違反が発生するのはなぜですか?

これは小さな関数です。何かをテストしていたので、それを書きました。ここで、文字列リテラルの文字値をインクリメントしようとしたときに、セグメンテーション違反が発生しました。ここで私が間違っていることを教えてください

#include <stdio.h>
int input_string(char *str)
{
  printf("%s\n", str);
  printf("%c\n", *str);
  printf("%c\n", (*str)++); // I get a segmentation fault here, cant i increment the value like this ?
}
void main()
{
  char *str = "andrew";
  input_string(str);
}
4

2 に答える 2

2

これchar *str = "andrew";が行うことは、.text (実行可能コードが存在する場所) に配置される可能性がある文字列へのポインターを作成し、それを変更しようとすると、未定義の動作になります。

これを変更します:

char str[] = "andrew";

安全に変更できるスタック割り当てバッファーに文字列のコピーを作成します。

于 2013-01-15T02:26:29.887 に答える
0

これ:

char *str = "andrew";

str が定数文字列リテラルを指すものを意味します。変更しようとすると、未定義の動作が発生します。

文字列操作を実行する場合は、文字配列を定義します。

于 2013-01-15T02:29:06.903 に答える