2012-02-24 10 views
2

ファイルを読み込んで画面に出力したいのですが。私は自分のIDEとしてXCodeを使用しています。ここに私のコードは...fread()は、奇妙なものをchar配列に置きます。

fp=fopen(x, "r"); 
char content[102]; 
fread(content, 1, 100, fp); 
printf("%s\n", content); 

ファイルの内容は "Bacon!"です。それが印刷されるのは\254\226\325k\254\226\234です。

私はこの回答を全面的に語りましたが、CでのファイルI/Oのドキュメントは疎であるようですが、そこにあるものはあまり明確ではありません。 (少なくとも私に...)

EDIT:私はちょうど読んで、追加と読んでいないに切り替えて、fread()で2つの中間の引数を切り替えました。今すぐプリントアウトBacon!\320H\320これらのことはどういう意味ですか?バックスラッシュナンバーナンバーや手紙のようなもの。私はまた、提案されているようにそれを印刷する方法を切り替えました。

+0

をファイルには何が? – Dani

+1

どこからでも読み込まれた書式文字列を使用しないでください!この場合、 'puts()'や 'printf("%s "、content)' – ydroneaud

+0

@Daniのどちらかを使用すると、 "Bacon!"というメッセージが表示されます。あなたはベーコンの力を疑っていましたか? – CoffeeRain

答えて

9

を開封してを読んだり、読み込み先を読んでいる場所に移動する必要があります(最初は想定しています)。

FILE *fp = fopen(x, "r"); 

または

FILE *fp = fopen(x, "a+"); 
rewind(fp); 

あなたは印刷する前に、それを終了する必要がありますので、また、fread(...)は、あなたの文字列をゼロ終了しない:

size_t len = fread(content, 1, 100, fp); 
content[len] = '\0'; 
printf("%s\n", content); 
+0

'' a + "'は、_and_の読み取りを付加することを意味します。 –

+0

a +は読み込みと追加のためにそれを開きます(私のローカルのマニュアルページによる)。これは最初からファイルを読み込むべきです...(今日何かを学んだことがあります) – vmpstr

+0

@JoachimPileborg良い点、それを反映する答えを更新しました。ありがとう! – dasblinkenlight

2

私はあなたがこの意味、と仮定します。考えられる理由は、あなたが読み込まれたデータを終了していないということですので、それは文字列の終端を検出するまでprintfはバッファを印刷し

printf("%s\n", content); 
0

を。たぶん

1

:あなたは追加するためのファイルを開くとを読んでいる

fp = fopen(x, "a+"); 
if(fp) 
{ 
    char content[102]; 
    memset(content, 0 , 102); 

    // arguments are swapped. 
    // See : http://www.cplusplus.com/reference/clibrary/cstdio/fread/ 
    // You want to read 1 byte, 100 times 
    fread(content, 1, 100, fp); 

    printf("%s\n", content); 
}