
構造体の各データの表示について以下のようなプログラムを作成しました。
#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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
ACCESS テキストボックスを隙...
-
【メモリ不足で落ちる(python)】
-
vbaでxmlからNodeListでデータ...
-
VBAでPDFのコピーとリネームを...
-
[python] 文字列を変数名として...
-
文字列を1つの要素とした配列...
-
FindFirst を複数条件で検索
-
JSONで文字列が長い時
-
VB6で、長い時間かかる処理...
-
セレクトメニューで2つの項目...
-
メモリをアドレスを直接指定し...
-
formで特定のinputを送信しない...
-
C言語のflagの使い方が分かりま...
-
プルダウンメニューで中央表示
-
セレクトボックスの「選択して...
-
16進の10進変換について
-
「HSP」でキャラコードを使って...
-
favicon.ico
マンスリーランキングこのカテゴリの人気マンスリー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化
おすすめ情報