2017-08-22 13 views
-1

2次元配列で、文字列に直接文字列を代入してエラーを取得します。Cの文字配列に直接文字列を代入する

char name[5][10]; 
name[0] = "hello"; 

strcpyを使用して、文字列をchar配列にコピーしてください。

char name[5][10]; 
strcpy(name[0],"hello"); 

なぜ最初のケースが機能しないのですか?

+3

はSO上でこのような質問のトンがあります:あなたはそれは配列が含まれていても、structに割り当てることができます

注意。 – Michi

+1

私たちはより良い詐欺をしてもらえますか?それはあまりにもC + +に傾いています。 –

+3

それはないDUP – Michi

答えて

2

アレイタイプは変更可能な左辺値ではないため、「割り当て」できないためです。

代入演算子は、LHSオペランドとして変更可能な左辺値を必要とします。

関連、引用C11、章§6.5.16

代入演算子は、その左側のオペランドとして変更可能な左辺値をもたなければなりません。

と、章§6.3.2.1

[...]変更左辺値が が配列型を有していないことが左辺値であり、不完全な型を持っていない、しませんコンスタント化された 型を持ち、それが構造体または共用体の場合、 型のメンバーを持ちません(再帰的に、 を含み、すべての集約または共用体のメンバーまたは要素を含みます)。あなたのケースで

char name[5][10]; 

ように定義されたアレイの要素name[0]はすなわち、10のcharの配列であり、タイプchar [10]です。

+0

おそらく 'strcpy'とそれがどのように動作するかについて言及することは興味深いでしょう。多分、OPはなぜそれが 'strcpy 'で動作するのか、そしてなぜそれがそのアプローチでは動作しないのかをより明確に理解するでしょう。 :) – Michi

+2

@Michiよく、あまりにも(広すぎる)。 OPはなぜstrcpyが動作するのかを知っているが、直接割り当てはしていないと主張している。 –

1

Cは配列に代入することができないためです。それは言語の限界です。

#include <stdio.h> 
struct x 
{ 
    char s[20]; 
}; 

int main(void) 
{ 
    struct x x; 
    x = (struct x){ "test" }; 
    puts(x.s); 
}