[解決済み] 構造体フィールドを代入すると「error: 式への代入で配列型エラーが発生しました」と表示される (C)
質問
私はC言語プログラマーの初心者です。昨日、C言語の構造体の使い方と、特定の問題の解決に関する構造体の応用の可能性について学びました。しかし、Cプログラミングのこの側面を学ぶために、私のC IDE (Codeblocks 16.01) で実験していたとき、私は奇妙な問題に遭遇しました。コードは以下のようなものです。
#include <stdio.h>
#define N 30
typedef struct{
char name[N];
char surname[N];
int age;
} data;
int main() {
data s1;
s1.name="Paolo";
s1.surname = "Rossi";
s1.age = 19;
getchar();
return 0;
}
コンパイル中に、コンパイラ(WindowsのGCC 4.9.3-1)が次のようなエラーを報告しました。
error: array type error" 式への代入。
命令で
s1.name="Paolo"
s1.surname="Rossi"
をする間に
data s1 = {"Paolo", "Rossi", 19};
は動作します。 何が間違っているのでしょうか?
解決方法を教えてください。
での問題に直面しています。
s1.name="Paolo";
というのも,LHSで 配列 型であり、これは 割り当て可能 .
詳しく説明すると、から
C11
章6.5.16
代入演算子は、左オペランドとして変更可能な lvalue を持たなければならない。
であり、また 変更可能な lvalue 章6.3.2.1より
変更可能な lvalue とは、以下のような lvalue のことです。 は配列型を持っていない [...] 。
を使用する必要があります。
strcpy()
から
にコピーします。
という配列になります。
それはそうと。
data s1 = {"Paolo", "Rossi", 19};
は問題なく動作します。なぜなら、これは直接
代入
には、代入演算子が含まれます。そこでは
中括弧で囲まれたイニシャライザーリスト
の初期値を提供する。
オブジェクト
. これは、§6.7.9 章で述べたように、初期化の法則に従ったものです。
中括弧で囲まれた各イニシャライザーリストは、関連するカレントオブジェクトを持ちます。何も 指定がない場合、現在のオブジェクトのサブオブジェクトは、次の順序で初期化されます。 配列の要素は添え字の多い順に、構造体の要素は添え字の少ない順に。 のメンバー(宣言順)、およびユニオンの最初の名前の付いたメンバーです。
関連
-
[解決済み】constで変数を初期化しようとすると「initializerの要素が定数でない」というエラーが発生する。
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] struct has no member named
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない