0

次のコードがあります。

str = "ABCD";  //0x001135F8  
newStr = "EFGH"; //0x008F5740

*str5番目の位置で再割り当てした後-//0x001135FC
私はそれを指すようにしたい:0x008F5740

void str_cat(char** str, char* newStr)
{
 int i;
 realloc(*str, strlen(*str) + strlen(newStr) + 1); //*str is now 9 length long
 // I want to change the memory reference value of the 5th char in *str to point to newStr.
 // Is this possible?
 // &((*str) + strlen(*str)) = (char*)&newStr; //This is my problem (I think)
}
4

2 に答える 2

1

C について非常に重要なことを混同しているようです。ポインタはメモリ内の単なるアドレスです。路上ライブアドレスです。409 K ストリートが好きだとしましょう。次に、誰かが行き、409 番地に「D」、410 番地に「E」、411 番地に「A」、412 番地に「D」をスプレー ペイントします。 203、「E」は 204、「F」は 205 です。「ねえ、413 K ストリートは 202 M ストリートと同じになりました」と言ってよいのでしょうか。いいえ、そうではありません。代わりに、まだ塗装されていない家がたくさんあるブロックを探しに行き、そのうちの 8 軒に「DEADBEEF」と書かなければなりません。

同様に、C では、2 つの文字列の長さに 1 を加えた長さの新しい文字列をゼロ ターミネータに割り当て、最初の文字列を最初の 4 つの位置にコピーし、次の文字列を残りの部分にコピーします。

于 2012-09-16T09:34:35.383 に答える
0
void str_cat( char* dest, char* src )
{
   dest = realloc( dest, strlen( dest ) + strlen( src ) + 1 );

   strcpy( dest + strlen(dest), src );
}

動作するはずです-テストするコンパイラが手元にありませんが

またはさらに高速で、ほとんどポインタがありません: http://www.koders.com/c/fid359660C181A42919DCB9E92C1406B7D16F27BB8D.aspx

于 2012-09-16T09:28:14.207 に答える