
現在VisualC++でアドレス帳を作成しています。
一人を構造体として、各メンバに値を入力し、ファイルに出力するプログラムを組みましたが、出力ファイルには文字化け?のようなものが出てきてしまいます。
メンバ変数に char* name があり、最初に
name = (char *)malloc(NameLength);
としてメモリを確保し、コンソール画面では全角入力によりデータを格納しています。
また char* age としてメンバを定義した場合は半角入力でデータを与えています。
これらを標準出力fopen("filename.txt", "w");より出力した場合変なもじ?が出力されてしまいます。
出力は fputs関数を利用しています。
文字化けを防ぐ方法はないでしょうか?
No.1ベストアンサー
- 回答日時:
書かれたコードをすべて提示していただけますか?
この回答への補足
返答ありがとうございます。
少し長くなってしまったので、誤りがありそうな部分のみ提示させてもらいます。もしほかに必要な部分がありましたら申し訳ないですが再度要求をお願いします。
まず入力部分です
void AddMember(PersonalData **src){
PersonalData *temp;
temp = (PersonalData *)malloc(sizeof(PersonalData));
MakeMemory(temp);
printf("[ 名前 ] :");gets(temp->Name);
printf("[ フリガナ ] :");gets(temp->Kana);
printf("[ 年齢 ] :");gets(temp->Age);
printf("[ 郵便番号 ] :");gets(temp->PostCode);
printf("[ 住所 ] :");gets(temp->Address);
printf("[ 電話番号 ] :");gets(temp->TelephoneNumber);
printf("[ 携帯電話番号 ] :");gets(temp->CellularPhoneNumber);
printf("[ メールアドレス1 ] :");gets(temp->MailAddress1);
printf("[ メールアドレス2 ] :");gets(temp->MailAddress2);
printf("[ メールアドレス3 ] :");gets(temp->MailAddress3);
src[TotalMember] = temp;
TotalMember++;
}
人の構造体をPersonalDataとし、各メンバにデータを与える部分です。
その後構造体を管理する引数 **src に登録する。
次にデータ保存部分です。
void WriteMemberFile(const PersonalData **src, int Member){
int i;
FILE *fp;
fp = fopen("MembersFile.txt","w");
fprintf(fp, "%d\n", TotalMember);
for(i=0; i<Member; i++){
UnTrimKaigyou(src[i]);
fputs(src[i]->Kana, fp);
fputs(src[i]->Name, fp);
fputs(src[i]->Age, fp);
fputs(src[i]->PostCode, fp);
fputs(src[i]->Address, fp);
fputs(src[i]->TelephoneNumber, fp);
fputs(src[i]->CellularPhoneNumber, fp);
fputs(src[i]->MailAddress1, fp);
fputs(src[i]->MailAddress2, fp);
fputs(src[i]->MailAddress3, fp);
}
fclose(fp);
}
for分の次に出てくる関数ですが、構造体のメンバ変数は全て改行文字を終端記号にしているため、逆に終端記号を改行文字に変換するための関数です。以下に示します
void my_struntrim(char *buff1){
while(*buff1 != '\0')
buff1++;
*buff1 = '\n';
}
よろしくお願いします。
連続書き込み申し訳ありません。
何とか自力で解決することができました。
gets関数からfgets関数に変更し、ファイルポインタの部分をstdinとして読み込みました。
結果こちらのほうが良かったのかもしれません。
getsの場合入力バッファがあふれる可能性がありますが、fgetsの場合は読み込む量を指定できるので、バッファの恐れがありません。が、ファイルからの入力同様に改行コードまで読み込んでしまうため、改行コードを終端記号に置き換える作業が必要になりますが、これはたいした問題ではありません。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C++の標準入力の書き方 6 2023/02/23 23:53
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
美容用超音波器具の効果
-
プログラムについての質問です...
-
4Kの外部モニターに出力すると...
-
中国の電子レンジの火力は何ワ...
-
Velocityでログを出力する方法...
-
Accessのテーブルからcsv出力す...
-
C#の問題がわかりません...
-
BCB6 見せかけのステップ実行!?
-
VBAを使って1レコードごとに・...
-
UnixShellプログラミングで質問...
-
フィルターを使わずにVBA ...
-
軽いデータで出力
-
ファイルへの出力
-
スマホ充電器購入にあたり
-
DVI出力とHDMI出力
-
PD充電器について
-
C言語の教科書
-
jigブラウザってphpページも見...
-
Macで多CHサウンド出力は出来な...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
PD充電器について
-
cout と cerrの違い
-
スマホ充電器購入にあたり
-
Accessのテーブルからcsv出力す...
-
MMDでavi出力が出来ない
-
printfとputcharの違いは
-
VBAのExecメソッドで画面を非表...
-
TV出力ポートをOFFにすれば良い...
-
COBOLのMOVEで桁数が異なる場合
-
VBAでテキスト出力時のスペース...
-
ACCESS クエリ→フォーム...
-
coutで出力した文字を消去する...
-
4種類(A4縦、A4横、A3縦、A3横)のヘ...
-
Windows Formアプリからコンソ...
-
コンセントの電力は入力と出力...
-
C#でアクセス権限の取得方法が...
-
【VBA】PDFを2in1で出力したいです
おすすめ情報