次のコードはセグメンテーション違反のようで、その理由がわかりません。
#include <string.h>
static char src[] = "aaa";
int main()
{
char* target[2] = {"cccc","bbbbbbbbbb"};
strcpy(target[1],src);
return 0;
}
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