0

ポインターを変更して元の文字列の値を変更しようとしています。

私が持っているとしましょう:

char **stringO = (char**) malloc (sizeof(char*));
*stringO = (char*) malloc (17);    
char stringOne[17] = "a" ;
char stringTwo[17] = "b";
char stringThree[17] = "c";
char newStr[17] = "d";
strcpy(*stringO, stringOne);
strcpy(*stringO, stringTwo);
strcpy(*stringO, stringThree);
//change stringOne to newStr using stringO??

ポインターを使用するstringOneのと同じように変更するにはどうすればよいですか?newStrstringO

編集:質問がかなり不明確だったと思います。*strcpyコピー元の最新の文字列を変更したい。したがって、strcpy(*stringO, stringThree);が最後に呼び出された場合は、 が変更されstringThreestrcpy(*stringO, stringTwo);その後string Twoなどが変更されます。

4

2 に答える 2

2

コピー元の最新の文字列を変更したい。strcpyしたがって、strcpy( ( *stringO ), stringThree );が最後に呼び出された場合は、 が変更されstringThreestrcpy( (*stringO ), stringTwo );その後stringTwoなどが変更されます。

--を使用して文字列のコピーstrcpyを作成しているため、メモリのブロックを指していないため、このアプローチではこれを行うことはできません。あなたの目標を達成するために、私は次のことを行います:

char *stringO = NULL;

char stringOne[ 17 ] = "a";
char stringTwo[ 17 ] = "b";
char stringThree[ 17 ] = "c";
char newStr[ 17 ] = "d";

stringO = stringOne; // Points to the block of memory where stringOne is stored.
stringO = stringTwo; // Points to the block of memory where stringTwo is stored.
stringO = stringThree; // Points to the block of memory where stringThree is stored.

strcpy( stringO, newStr ); // Mutates stringOne to be the same string as newStr.

stringO...文字列をコピーするのではなく、どこを指すかを変更(更新)していることに注意してください。これにより、 stringO が指しているメモリのブロック内の値を変更することができます (その結果、最新のstringXXXものが格納されます) - 要求に応じて。

于 2013-08-16T04:50:59.020 に答える
1

1 つの方法を次に示します。

char **stringO = (char**) malloc (sizeof(char*));
char stringOne[17] = "a" ;
char stringTwo[17] = "b";
char stringThree[17] = "c";
char newStr[17] = "d";

*stringO = stringOne;
strcpy(*stringO, newStr);

stringOメモリを割り当てた方法を使用する必要がある場合は、次のようにします。

strcpy(*stringO, newStr);
strcpy(stringOne, *stringO);
于 2013-08-16T04:49:52.003 に答える