• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの読み込みについて)

ファイルの読み込みでエラーが発生する原因とは?

このQ&Aのポイント
  • VisualStudio 6.0で住所帳のファイルを読み込む際、改行コードの削除処理でエラーが発生しています。
  • 読み込んだ郵便番号にハイフンが含まれる場合、my_strtrim関数でエラーが発生します。
  • ハイフンを除去しないまま読み込むと、後続の情報の表示が乱れます。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

my_strtrim() を呼び出しているところを どういう風に書いているかが見たいです。 my_strtrim() に渡す引数を malloc() で確保しているのでしたら、 malloc() のところも見たいです。

Mr_tenten
質問者

お礼

2回連続の書き込み申し訳ありません。 単純なミスでした。 333-3333これで文字数は8 自分が定義した文字数はPostcodeLengthの値は8 確保したメモリの長さは9 つまり333-3333の文字列+改行コードが格納されると思ったのですが、 その後にNULL文字を格納することを忘れていました。 普通にfgetsならば 文字数+改行コード長+終端文字として確保しなければエラーが出てしまうのですね。 返答ありがとうございました。

Mr_tenten
質問者

補足

返答ありがとうございました。 説明不足で申し訳ありません。 具体的に説明させてもらいます。 一人の情報はPersonalData構造体で表し、各メンバは上記で説明したメンバ変数が定義されています。 typedef struct{ char* Kana; char* Name; char* Age; char* PostCode; char* Address; char* TelephoneNumber; char* CellularPhoneNumber; }PersonalData; まず一人のデータを読み込むため、この構造体を1つメモリ確保し、その次に構造体の各メンバについてメモリを確保して、ファイルから読み込んだデータを格納す量にしています PersonalData *personal_data; personal_data = (PersonalData *)malloc(sizeof(PersonalData)); MakeMemory(personal_data); fgets(personal_data->Kana, KanaLength + 1, fp); fgets(personal_data->Name, NameLength + 1, fp); fgets(personal_data->Age, AgeLength + 1, fp); fgets(personal_data->PostCode, PostCodeLength + 1, fp); fgets(personal_data->Address, AddressLength + 1, fp); fgets(personal_data->TelephoneNumber, TelephoneNumberLength + 1, fp); fgets(personal_data->CellularPhoneNumber, CellularPhoneNumberLength + 1, fp); TrimKaigyou(personal_data); 途中に自作関数が数個あるので、それらについて以下に提示します。 void MakeMemory(PersonalData *src){ src->Kana = (char *)malloc(KanaLength + 1); src->Name = (char *)malloc(NameLength + 1); src->Age = (char *)malloc(AgeLength + 1); src->PostCode = (char *)malloc(PostCodeLength + 1); src->Address = (char *)malloc(AddressLength + 1); src->TelephoneNumber = (char *)malloc(TelephoneNumberLength + 1); src->CellularPhoneNumber = (char *)malloc(CellularPhoneNumberLength + 1); } void TrimKaigyou(PersonalData *src){ my_strtrim(src->Kana); my_strtrim(src->Name); my_strtrim(src->Age); my_strtrim(src->PostCode); my_strtrim(src->Address); my_strtrim(src->TelephoneNumber); my_strtrim(src->CellularPhoneNumber); } この中のmy_strtrim関数は質問欄に記述してあります。 そして、ちょっと間違いがありました。 333-3333と記述した場合エラーで止まってしまうのですが、3333333と記述した場合は普通に表示することができました。 表示の部分に間違いがあったためです。 そのほかに色々と確認してみましたが、ハイフンを入れた場合に止まってしまいます。

関連するQ&A