2012-02-25 16 views
1

私はポインタと構造体に問題があります。Cでの代入に互換性のない型があります

struct foo{ 
char a[15]; 
} 

void asn_foo(struct foo *pa){ 
    (*pa).a = "123"; 
} 

main() 
{ 
    struct foo foo1[2], *pf; 
    pf = &(foo1[0]); 
    asn_foo(pf); 
} 

私がして、新しい値を代入しようとしている:

(*pa).a = "123"; 

が、私はこの行のエラー「割り当てで互換性のないタイプ」を持っています。 私は何が間違っていますか?

+0

閉じるには、これはよくある質問です:http://c-faq.com/charstring/assign.html –

+0

SOの複製を指すことができない限り、それはOKです。 –

+0

[構造体に互換性のない代入でのChar配列の可能な複製](http://stackoverflow.com/questions/1292586/char-array-in-a-struct-incompatible-assignment) –

答えて

9

割り当て演算子を使用して配列に新しい値を代入することはできません。文字列"123"の内容を配列にコピーする必要があります。そうするstrcpyを使用します。

strcpy(pa->a, "123"); 

もう一つのトリックは、(あなたがここでやったとして)structであなたの配列をラップし、あなたの配列に新しい値を割り当てるために、別の構造体を割り当てています。

あなた行うことができます。

struct foo f1 = { "abc" }; 
struct foo f2 = { "123" }; 
f1 = f2; 

f1.aは今"123"を開催します。

また、mainintを返します。

関連する問題