-2
char** key;

strcpy(*key, "Hello");
strcpy(*(key+1), "World");

printf("%s", *key);

2 番目strcpyにはエラーはありませんが、1 番目strcpyにはセグメンテーション違反があります。本来の目的を達成するためにどのように変更すればよいですか?

4

4 に答える 4

1

あなたがしていることは未定義の動作です。

char * strcpy ( char * destination, const char * source )

strcpyは、変更可能な宛先を想定しています。char **書き込み用のメモリを割り当てていないため、問題の原因となっているa を渡しています。

これは(おそらく)あなたがしようとしていたものです:

  char* key = malloc(sizeof(char)*7); // 7 because it can Hold World with a Nul character

  strcpy(key, "Hello");
  strcpy((key+1), "World");

  printf("%s", key);
于 2013-10-09T05:45:56.613 に答える
0

strcpy()メモリの割り当てをスキップしたい場合は、を実行する前に にメモリを割り当てる必要がありますstrdup()

簡単にするために、あなたが本当に欲しいかどうかわからないchar **keychar *key

char* key = malloc(sizeof(char) * 100); //allocate to store 100 chars
strcpy(key, "Hello");
strcpy(key + strlen(key), "World");
//or strcat(key, "World");

2 番目の strcpy にはエラーがありませんが、最初の strcpy にはセグメンテーション違反があります

セグメンテーション違反のために実行されなかったときに、2番目のものにエラーがないことをどのように知っていますか?

于 2013-10-09T05:48:05.000 に答える