2017-11-05 4 views
2

私はメイン関数にwhileループを持っています。そこで、ユーザーは文字列を入力し、それをある構造体のテキストフィールドに割り当てる関数に渡します。C:既に設定されている値を変更せずに、同じchar * []を何回も使用できますか?

int main(void){ 
char text[255]; 
while(0) { 
    scanf("%s", text); 
    someFunction(text) 
    } 
} 
someFunction(char* text){ 
someStruct str = malloc (sizeof (str)); 
str.textfield = text; 
} 

は今、私は、char配列は参照によって渡されていることを知り、従ってsomeStructの全て作成されたインスタンスは、同じテキストフィールド、「テキスト」をスキャンして保存した。すなわち、最後の1つを有することになります。しかし、どうすればこの問題を回避できますか?

+2

あなたの構造体フィールドに 'text'を割り当てるだけでポインタがコピーされるので、' text'の後続の使用で上書きされます。代わりに 'strdup(text)'を使用して文字列のコピーを作成します(これは 'malloc'を呼び出して、その文字列を新しく割り当てられた記憶領域にコピーします)。 –

答えて

1

文字をmalloc文字列にコピーする必要があります。それを行うための最も簡単な方法は、あなたのtextfieldにあなたの文字列をstrdup()することです:

str.textfield = strdup(text); 

あなたはこれをしなかった場合は、あなたのmalloc()を削除します。 strdup()は暗黙的にmalloc()です。

関連する問題