3

次のコードはセグメンテーション違反のようで、その理由がわかりません。

#include <string.h>

static char src[] = "aaa";

int main()
{
   char* target[2] = {"cccc","bbbbbbbbbb"};
   strcpy(target[1],src);
   return 0;
}
4

1 に答える 1

11

target[1]はへのポインタであり、文字列定数を変更すること"bbbbbbbbbb"はできません。未定義の動作です。

次の場合と同じです。

char *x = "bbb";
x[0] = 'a';

あなたはそれを混同しているかもしれないと思います:

char x[] = "bbb";
x[0] = 'a';

これ、変更が許可されている配列を作成するため有効です。しかし、あなたがあなたに与えるもの:

char* target[2] = {"cccc","bbbbbbbbbb"};

ポインタの配列であり、そのすべてが変更不可能なメモリを指しています。

あなたがしようとした場合:

char t0[] = "cccc";
char t1[] = "bbbbbbbbbb";
char* target[2] = {t0, t1};
strcpy(target[1],src);

変更可能な をtarget[1]指しているため、機能することがわかります。t1

于 2011-02-22T02:52:15.023 に答える