
構造体の各データの表示について以下のようなプログラムを作成しました。
#include <stdio.h>
struct tb{
char name[20];
char sex;
int age;
double height;
double weight;
};
int main(void)
{
int i;
struct tb test[2];
test[0].name="amada"
test[0].sex='f';
test[0].age=20;
test[0].height=172.5;
test[0].weight=62.5;
test[1].name="okada";
test[1].sex='f';
test[1].age=21;
test[1].height=180.2;
test[1].weight=70.8;
for(i=0; i<2; i++){
printf("%s %s %d %f %f \n",test[i].name,test[i].sex,test[i].age,test[i].height,test[i].weight);
}
return 0;
}
ファイル名を適当にsample.cとしてgcc sample.c した所、以下のようなコンパイルエラーが出ました。
sample.c: In function ‘main’:
sample.c:18: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
sample.c:18: error: expected ‘;’ before ‘test’
sample.c:23: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
このエラーを元にソースをどのように修正したらよいか教えて頂けますでしょうか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
エラーメッセージに書いてある通り
構造体を以下のように定義するか
struct tb{
char name[20]; -> char *name
char sex;
int age;
double height;
double weight;
};
#include <string.h>
を追加して
strcpy(test[0].name,"amada");
にするかのいずれか(後者の方がいいと思うけどね)
あとは
>test[0].name="amada"
文末に;が無いね。
No.4
- 回答日時:
まずtest[0].name="amada"に『;』が抜けています。
まあ今回はこれが原因ではありませんが・・・・最初に#include <stdio.h>だけなく#include <string.h>をその下に入力してください。
次にtest[0].name="amada";では実行できません。
strcpy(test[0].name,"amada");と書き換えてください。
同様にtest[1].name="okada";をstrcpy(test[1].name,"okada");に書き換えてください。
これでいいはずですよ
No.3
- 回答日時:
sample.c:18: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
構造体の宣言時の初期設定以外で、配列要素に文字列リテラルは代入できません。
strcpy関数等でコピーしてください。
sample.c:18: error: expected ‘;’ before ‘test’
文末の「;」が抜けています。
sample.c:23: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
これが一番上と同じ。
No.1
- 回答日時:
test[0].name="amada"
これを
strcpy(test[0].name,"amada");
test[1].name="okada";
これも
strcpy(test[1].name,"okada");
です。
間違いの理由は
文字列へ文字列へのポインターを代入したとエラーになっています。
つまり、
test[1].name="okada";
これは暗示キャストをつけると
(char[20])test[1].name=(char *)"okada";
なので、型が違うので代入はできないよーということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
FindFirst を複数条件で検索
-
C++ コマンドプロンプトでの入...
-
phpでボタンを押したときに変数...
-
UWSC:ポップアップウインドウ...
-
VBAでPDFのコピーとリネームを...
-
「*:*」って何を意味するのでし...
-
バッチファイル 戻り値
-
JSONで文字列が長い時
-
文字の横にプルダウンを表示さ...
-
<SELECT>タグの折り返し
-
SetDlgItemInt( ) c++
-
formで特定のinputを送信しない...
-
16進の10進変換について
-
リロード後にプルダウンの選択...
-
複数列を持ったリストボックス...
-
pythonで演算子を変数に代入す...
-
レコード取得件数の表示位置に...
-
テーブル内でドロップダウンメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
FindFirst を複数条件で検索
-
ACCESS テキストボックスを隙...
-
[python] 文字列を変数名として...
-
vbaでxmlからNodeListでデータ...
-
VBAでPDFのコピーとリネームを...
-
コンボボックスのtag情報の取得...
-
【メモリ不足で落ちる(python)】
-
構造体の各データの表示につい...
-
構造体の変数の値を、動的に取...
-
phpでボタンを押したときに変数...
-
VBAで特殊文字を出力したい
-
C言語でテキストを抽出
-
PHP+SQLiteでmax(id)が使えない?
-
「*:*」って何を意味するのでし...
-
C++ コマンドプロンプトでの入...
-
2つのpythonがあって、一方で...
-
VBAでシート名の定義を変更した...
-
GUI操作のCUI化
おすすめ情報