2012-03-15 4 views
0

を新しい文字を追加する私は、私は基本的には、古い配列のmalloc関数を基にして新しい配列にreallocの

をこのウェブサイト上の以前の質問をし、それは擬似コードを使用して答えてしまった、まだ私はまだきちんとこの問題を解決する方法を見つけ出すカント文字の配列と、ユーザーが選択する数値を渡します。この数字は、配列に追加する文字の数に相当します。私はsize = old配列+追加する新しい文字数の新しい配列を作成し、ユーザーに新しい文字を入力させ、それを新しい配列に追加します(古い文字を再割り当てします)。私はこれを行う方法を知らない!そして挫折している。

char * add(char * array, int num) 
{ 
/* malloc new_size bytes and assign to new_array 
memcpy old_size bytes from old_array into the new_array 
add additions into new_array starting from (new_array+old_size) 
free the old_araray 
return new_array; 
*/ 

} 
+0

これまでに試したことを示すために質問を編集してください。 –

+0

[ユーザー入力を受け取り、それを配列に追加する関数]の重複が可能です(http://stackoverflow.com/questions/9706828/function-that-takes-user-input-and-adds-it-to-an-配列) –

+0

この関数も古いサイズを必要とします。それ以外の場合は、どれだけコピーするかわかりません。 – wildplasser

答えて

2

あなたはので、おそらくあなたがrealloc()機能の認識している問題「のreallocを」タグ付け。それは私がここに表示されていない何を代わりにmalloc()memcpy()、およびfree()

のものを使用するように、単純に、そしておそらくより効率的になるだろう、しかし、機能は「古い」配列のサイズを知っている方法です。それはヌル終了文字列ですか?そうでない場合は、既存の配列の大きさを示す別の整数を渡す必要があります。それがNULLで終わる文字列ではない場合、あなたはむしろstrlen()でそれを判断するよりも、引数としてold_lengthに渡したい

char *add(char *string, int num) { 
    // Note, these represent the length *without* the null terminator... 
    int old_length = strlen(string); 
    int new_length = old_length + num; 

    // ...so we add 1 here to make room for the null. 
    string = realloc(string, new_length + 1); // Error checking omitted 

    for (int n = old_length; n < new_length; n += 1) { 
    // Prompt for the new characters; here I'll just assume they're all 'X'. 
    char new_char = 'X'; 

    string[n] = new_char; 
    } 

    string[new_length] = '\0'; 

    return string; 
} 

それはヌルで終了する文字列だと仮定すると、あなたはこのような何かを行うことができますrealloc()コールに1を加えないで、最後にstring[new_length]をヌルに設定しないでください。残りは同じままです。

+0

病気これを試してみてください! – anthony

関連する問題