
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を探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
エクセルVBA:日付データの変換...
-
画像処理のチェーンコード
-
ピクセル,dpiから容量(バイト...
-
char str[256]の256の意味は?
-
半長音(ー)及び半角文字を1バ...
-
10Mバイトて文字数に すると何...
-
「1TB」のHDDに日本語は何字入...
-
COBOLのCOMP形式について
-
VB6で漢字の1バイト目か2バイト...
-
DataGridViewの特定列に入力さ...
-
機種依存文字をチェックしたい。
-
64bit対応
-
Excel VBA で Oracle CLOB型カ...
-
perlプログラミング 空白行削除
-
VBAでShift-JISのURLエンコード
-
VB.NET LeftBの代用
-
number 改行が追加できない
-
エクセルシート名の制限を変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
C言語の勉強しています。すみま...
-
C言語についてです! 同じ年の...
-
ポインター引数の関数でコンパ...
-
c言語での wavファイルの編集(...
-
C#でのswitch文
-
ビットデータのチェック方法
-
txtファイルを読み込んで表示関...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
'dataType' 引数を Null にする...
-
Cのプログラムがどうしても動き...
-
C言語について
-
matlabでのRRI検出
-
【VBA】複数条件の検索
-
VBA セルの値入力について
-
Nextの次に、入力した数値の中...
-
System.Collections.ArrayList ...
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報