Cを勉強中なのですが、以下のプログラムがうまくいきません。
(studentは構造体で定義した型です。)
iが0でない5の倍数の時にreallocでメモリを増やそうと思ったのですが、
「21行目」(reallocの行)で記述エラーを発見しました。
「lvalue」を付け忘れています。
と表示されます。
どこが間違っているのでしょうか?教えてくださいm(_ _)m
#include<stdio.h>
typedef struct{
char name[20];
int year;
char sex[6];
}student;
void read_data(int,student*);
void write_data(int,student*);
int main(void){
student data[5];
int i=0,j=0;
do{
read_data(i,data);
i++;
if(i%5==0 && i!=0){
data=realloc(data,(sizeof(student))*(i+5));
}
}while(data[i-1].year!=-1);
}
for(j=0;j<i-1;j++){
write_data(j,data);
}
free(heap);
return 0;
}
void read_data(int i,student *data){
printf("%d人目\n",i);
printf("名前?\n",i);
scanf("%s",(data[i].name));
printf("年齢?\n",i);
scanf("%d",&(data[i].year));
printf("性別?\n",i);
scanf("%s",(data[i].sex));
return;
}
void write_data(int j,student *data){
printf("%d人目\t",j+1);
printf("名前:%s\n",data[j].name);
printf("年:%d\n",data[j].year);
printf("性:%s\n",data[j].sex);
return;
}
No.1ベストアンサー
- 回答日時:
reallocはmallocやcallocで確保した領域を拡張するときに使うものです。
配列は拡張できません。
配列自体に = で代入することもできません
> 「lvalue」を付け忘れています。
わからないなら、エラーは正確に書きましょう。
「lvalue required as left operand of assignment」とかじゃないですか?
配列dataは代入や変更のできない右辺値(rvalue)で、代入や変更のできるlvalue(左辺値)ではない、ということです。
あと、{}の数間違えてませんか?
free(heap); も heapなんて変数は使われてませんが
No.2
- 回答日時:
realloc()の使い方で…よくやるミスになりそ~な気もするので注意しましょう。
配列ではなくポインタでやるように変更した後…になりますが。
realloc()が失敗したらどうなるか。
という点で注意が必要です。
「realloc 失敗」で検索すれば見つかるでしょう。
ちなみに、リンクリストという方法もあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
あなたの習慣について教えてください!!
あなたが習慣だと思って実践しているものを共有してくださいませんか? 筋肉トレーニングでも朝シャワーでも、あなたが習慣だなと思えば何でも構いません
-
エラーの意味は? Lvalue required
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
'dataType' 引数を Null にする...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
C言語についてです! 同じ年の...
-
DataGridViewの特定列に入力さ...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
CRC計算方法
-
PHPのCookieが有るか無いかで、...
-
3バイト文字(UTF-8)をprintfで...
-
char str[256]の256の意味は?
-
perlプログラミング 空白行削除
-
Excel 1セル当りの文字数が2...
-
&jcode'convert(しても文字化け...
-
64bit対応
-
VB6で漢字の1バイト目か2バイト...
-
C++ Builderで文字列をバイトに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
CreateProcessでの環境変数の設...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
【Excel VBA】10進数を2進数に...
-
matlabのソースコードをpython...
-
C++ multipart/form-data f
-
Cのプログラムがどうしても動き...
-
テキストファイルの結合について
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C言語 構造体の名前欄?を小文...
-
C++/CLIのオブジェクト型配列
-
CSVファイルの行と列のセルって...
-
C言語 ファイル内のデータと入...
-
アプリケーション
おすすめ情報