fread(),fwrite()等について
私は現在、C言語のストリームというところを勉強中で、その中でfopen()やfread(),fwrite()といった関数の使い方の例が参考書に書いてあるのですが、結果が上手く表示されず困っています。次にプログラムの説明と、ソースを載せています。
<説明>
10個の要素を持つ配列を浮動小数点数で埋め、それらをファイルに書き込み再び読み込みます。このプログラムは配列の要素を1つずつ書き込みます。
#include <stdio.h>
#include <stdlib.h>
double d[10] = {
10.2, 5.3, 7.91, 1.23, 7.7,
6.4, 89.12, 6.43, 5.55, 2.5
};
int main(void)
{
FILE *fp;
int i;
if((fp = fopen("myfile", "wb")) == NULL){
printf("ファイルを開くことが出来ません\n");
exit(1);
}
if(fwrite(d, sizeof d, 1, fp) != 1){
printf("書き込みエラー\n");
exit(1);
}
fclose(fp);
if((fp = fopen("myfile", "rb")) == NULL){
printf("ファイルを開くことが出来ません\n");
exit(1);
}
for(i = 0; i < 10; i++)
d[i] = -1.0;
if(fread(d, sizeof d, 1, fp) != 1){
printf("読み込みエラー\n");
exit(1);
}
fclose(fp);
for(i = 0; i < 10; i++)
printf("%f\n", d[i]);
return 0;
}
これを実行後、myfileをテキスト形式で開くと
ffffff$@333333@、p=
ラ」@ョG痙ョ・ヘフフフフフ@囮劔劔@H痙ョGV@ク・Qク@333333@ @
と文字化けして表示されてしまいます。
プログラミング自体勉強するのは今回が初めてで、何がダメなのか見当が付きません。
実行時にエラーが出るわけでもありません。
長くなりましたが、解決策がお分かりの方よろしくお願いします。
補足
回答ありがとうございます。 入門書のサンプルはrbで開いています。でも 例) fp = fopen("hogehoge.bin", "rb"); fread(&ch, sizeof(char), 1, fp); はあっても、 fp = fopen("hogehoge.txt", "r"); fread(&ch, sizeof(char), 1, fp); とは無いのでやはりfread, fwriteは基本的バイナリで使うものなのでしょうか?