• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メモリ)

メモリの取得方法についての質問

このQ&Aのポイント
  • メモリの取得方法についてご質問します。
  • 先日、文字列入れ替えについてご質問した際、固定的なメモリの確保ではなく、動的にメモリを確保する方法についてアドバイスを頂きました。
  • しかし、data[i].○○の形でアクセスしたいため、変更を加えずにメモリを取得する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>としてみたのですがこれは実際どうなのでしょうか? 問題はソコじゃない。 >my data[100]と固定してるのはいけないという意見をもらったので >メモリを取得しようと思ってるのですが って事は「data[100]って言う、固定サイズの配列じゃ駄目だ」って事ですよ。 なのに、なんで、それとは全っ然関係ない、bufの所を弄くり回すんですか? まるで「歯が痛いのに、歯医者に行かずに肛門科に行くようなもん」ですよ。いくら肛門を調べたって、歯が痛いのは治りません。 >my data[100]; (略) >while(fgets(buf,1000,fp) !=NULL){ (略) >strcpy(data[line].number, bufG); (略) >strcpy(data[line].class_type, bufG); (略) >strcpy(data[line].name, bufG); (略) >strcpy(data[line].subject, bufG); (略) >line++; 読んでるcsvファイルが101行あったら、dataが100個しかないのに、101番目にデータをコピーしてしまいますね。 102行あったら102番目に、200行あったら200番目にデータをコピーしちゃいます。 でも、配列は100個分しかありません。 前の質問の回答者さんは、それを「何とかしろ」って言ってるんです。 それと、配列の構造体ですが、それぞれの文字列は「長さに上限がある」のは判りますか? typedef struct { char number[6]; char class_type[20]; char name[8]; char subject[5]; } my; って感じで文字数固定でやってるんだから、もし、読んでるcsvファイルの中に 1,A,山根,音楽 2,B,本田,美術 123456789,テストクラス,テスト氏名,テスト科目 3,B,松本,美術 4,A,横野,音楽 みたいな「カンマで区切られた項目のどれかが、構造体のそれぞれの文字数の上限をオーバーしている」ような行があったら、どうなるでしょうか? strcpy(data[line].number, bufG); numberは6文字なので、終端文字で1文字使うのを含め5文字しか入りません。 そこにcsv3行目の「123456789」をコピーしたらどうなるでしょう? 6文字しかない場所に、9文字の文字と終端文字の1文字をコピーしたら、10文字分の場所に文字がコピーされます。 足りない4文字分はどうなるでしょう。 少なくとも「1行づつbufに読んでる部分は、何の問題もない」ので、そこを弄くり回すのは間違いです。 まるで「歯が痛いって訴えてる患者に浣腸をするようなもの」です。それじゃ歯痛は治りません。

関連するQ&A