0

別のポインタを使用して文字列の一部を変更しようとしています。私が持っているもの

    char** string = (char**) malloc (sizeof(char*));
*string = (char*) malloc (100);
*string = "trololol";

char* stringP = *string;
stringP += 3;
stringP = "ABC";
printf("original string : %s\n\n", *string);
printf("stringP : %s\n\n", stringP);

私が得るもの

original string : trololol;
stringP : ABC;

私が欲しいのは両方のtroABColです:D

文字列(char **)へのポインタがあることはわかっています。これは、メソッド内でこの操作を実行するために必要なものだからです。

4

2 に答える 2

1

strcpy(*string, "trololol");の代わりに行う必要があり*string = "trololol"ます。このソリューションでは、によって割り当てられたメモリポインタmalloc()が、事前に割り当てられた「トロロロール」文字列を含むデータへのポインタに置き換えられるため、メモリリークが発生します。

strcpy()が指している純粋な文字列をコピーし、代わりにstringP = "ABC";実行できますmemcpy(stringP, "ABC", 3)(最後にstrcpy追加しますが、コピーするように指示されたデータのみをコピーします)。\0memcpy

于 2012-10-15T15:03:46.927 に答える
0

アミットの答えを読んでください。また、あなたが書くとき

stringP = "ABC";

別の文字列を指すようにポインタを変更しているだけです。あなたはそれが指していた文字列を変更していません。あなたは見上げる必要がmemcpyありstrcpyます。

于 2012-10-15T15:05:38.603 に答える