char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
2 番目strcpy
にはエラーはありませんが、1 番目strcpy
にはセグメンテーション違反があります。本来の目的を達成するためにどのように変更すればよいですか?
char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
2 番目strcpy
にはエラーはありませんが、1 番目strcpy
にはセグメンテーション違反があります。本来の目的を達成するためにどのように変更すればよいですか?
あなたがしていることは未定義の動作です。
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);
strcpy()
メモリの割り当てをスキップしたい場合は、を実行する前に にメモリを割り当てる必要がありますstrdup()
。
簡単にするために、あなたが本当に欲しいかどうかわからないchar **key
、char *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番目のものにエラーがないことをどのように知っていますか?