2016-11-14 15 views
0

、私はこの配列にポインタを割り当てることができないのはなぜですか? Cでは

char * real = strdup("GEORGE"); 
char one[1024]; 
one = real; 

をコーディングすることだし、それは誤り与える:

invalid initializer

任意の提案を? チャンクの配列をcharポインタと同じにすることができますか?

+1

' strcpyの(1、真の)試してみてください:あなたのソース配列が終了ヌルであるかどうかに応じて、このように、strcpyまたはmemcpyを使用することができます。 –

+0

そして、あなたは 'char one [] =" GEORGE "'と書くこともできます。 –

+0

関連:[同じ型とサイズの配列を割り当てることができないのはなぜですか?](http://stackoverflow.com/questions/14826952/why-cant-arrays-of-same-type-and-size-be-assigned ) –

答えて

3

コードでは、oneは型配列の変数です。従って、

one = real; 

は、許可されていない配列タイプに割り当てようとしています。

詳細は、配列名は変更可能な左辺値ではなく、代入演算子はLHSオペランドとして変更可能な左辺値に対してのみ作用します。

C11を引用し、章§6.5.16

An assignment operator shall have a modifiable lvalue as its left operand.

してから、章§6.3.2.1、(emphaisがを採掘)

A modifiable lvalue is an lvalue that does not have array type, does not have an incomplete type, does not have a const qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const qualified type.

あなたは、コンテンツをコピーするstrcpy()を使用する必要がありますアレイに。

3

Cでは、配列初期化子に定数が必要です。これを行うには許可されています。

char one[1024] = "GEORGE"; 

またはこの

char one[1024] = {'G','E','O','R','G','E'}; 

が、配列へのポインタを割り当てることがないどのような状況、初期化子かどうかの下で許さです。

一方、コピーの内容は、charの内容を配列に挿入できます。 ; `

strcpy(one, real); 

または

memcpy(one, real, 7); 
+1

非常に正しいですが、私たちはOPが_初期化を望んでいると確信していますか?スニペットから、それはもっと私のことのように見えます。 –

+0

@SouravGhoshエラー記述 "invalid initializer"は、OPに表示されているコードスニペットが実際のコードで達成しようとしているコードスニペットではないことを示しています。そういうわけで私は初期設定から始めて、「不可能な割り当て」をカバーしています。 – dasblinkenlight

+0

本当、同意してください。 –

関連する問題