2011-01-31 32 views
3

Cの文字列配列に新しい要素を追加するにはどうすればよいですか?Cの文字列配列に要素を追加するには?

+0

あなたのアレイはすでにいっぱいですか?配列のサイズを増やそうとしていますか? – Davidann

+0

これをチェックしてください、http://stackoverflow.com/questions/4694401/how-to-replicate-vector-in-c/4694762#4694762 –

+0

その文字列の配列、または文字列(文字の配列)ですか?同様に、どちらのケースも独自の落とし穴があります。 – PeterK

答えて

1

アレイを拡張する場合は、アレイのメモリを再割り当てする必要があります。 reallocをチェックしてください。

5

文字列の場合は、strcat()some docs)を使用してください。メモリを許可した分だけ拡張することができますように心がけてください。別のポスターのように、realloc()にする必要があります。

-1

これは、配列と呼ばれるものによって異なります。

固定長配列が統計的に割り当てられている場合は、i番目の要素にデータをコピーするだけで済みます。

char foo[25][25]; 
strcpy(foo[1], "hello world"); /* "puts" hello world in the 2nd cell of the array */ 

あなたが動的配列を使用している場合は、まず、あなたのアイテムが同じように入れて、メモリを割り当てるotherwize、スペースがまだあることを保証しなければなりません。

+0

'strdup(foo [1]、" hello world ");'、 'foo [1]'は常にインデックス1にすべきですか?配列に5つの要素があったとしたら、 'foo [6]'を使うでしょうか?ありがとう –

+0

@James:要素を '0'から' 24'に変更することができます。そうしないと、メモリ内の間違った領域に書き込むと、データが失われたり、プログラムがクラッシュする可能性があります。 'foo [1]'は2番目の文字列の2番目の配列要素へのポインタです。 –

+0

あなたはどこで 'strdup'を手に入れていますか?標準バージョンのようには見えません。 – bstpierre

2

Cの文字列は、文字の配列で構成されています。 printf呼び出しを使用して文字列を正しく印刷するには、NULL文字(\ 0)で終了する必要があります。

新しい要素ieを追加します。文字を文字列の最後に移動し、NULL文字に移動します。&新しい文字に置き換えて、その後にNULLを入れます。これは、新しい文字に対してすでに十分なスペースがあることを前提としています。

char str[100]; 
char new_char = 'a'; 
int i = 0; 
... 
// adds new_char to existing string: 

while(str[i] != '\0') 
{ 
    ++i; 
} 
str[i++] = new_char; 
str[i] = '\0'; 
+0

私はそのコードが最後の要素の前に配列/文字列をnullで終了するように見えます –

+0

あなたのコンパイラでそれを試してください:この文脈では、 'str [i ++] = new_char;'は 'str [i] = new_char; i ++; 'まだ疑わしい場合は、http://stackoverflow.com/q/4865599/191776を参照してください。 –

関連する問題