2011-08-01 12 views
1

として、それを表示する私は、以下の内容を持つMySQL.txtという名前のテキストファイルがあります。問題テキストファイルの内容を読み取り、文字列

MySQL_IP:172.19.1.173 
MySQL_USER:kok 
MySQL_PASS:kok 
MySQL_DATABASE:kok 

を私が使用してファイルの内容を読み取るしようとしています

MySQL_IP:172.19.1.173 
:ど​​んなに私は、文字列バッファのサイズを増やすどのくらいのコード

#include<stdio.h> 
main() 
{ 
FILE *fp; 
char str[50000]; 
fp = fopen("MySQL.txt","r"); 
fgets(str,sizeof(str),fp); 
printf("%s\n",str); 
} 

を以下ません、私はあるtehの出力を提供しています

これはちょうど最初の行です...私は理由を知ることに失敗!

答えて

0

fgetsは、テキストまたはファイルの最後で次の\n(改行)までの行を読み取ります。

ファイル全体を読むには、feofがtrueを返すまでシーケンスを繰り返す必要があります。

+0

より正確には 'のfgets()'(文字列でそれを格納)*ライン*を読み込みます。 (または、それをすべて読むための余裕がない場合は、部分行を読みます。) –

+0

@Keith - ありがとう、typo – littleadv

3

あなたの答えを教えてくれる好きな検索エンジンで使いやすく簡単に検索できるドキュメントがあります。例えば、as described on this page for fgets()

関数fgets()は配列 にストリームからバイトを読み出すものと関数は、n-1バイトが読み出され、又は読み出されて さまで、によってS指さに転送されたか、ファイルの終了条件が発生しました。 文字列はnullバイトで終了します。

ファイル全体を一度に読む必要がある場合は、fgets()の代わりにfread()を使用してください。 fgets()とは異なり、fread()は改行の発生時の読み込みを停止しません。

ファイルライン・バイ・ラインを処理したい場合はfeof()が(EOFを示す)ゼロ以外の値またはferror()を返す(エラー状態を示す)ゼロ以外の値を返すまで、を繰り返しfgets()を呼び出します。

+0

'fgets()'が返す値をチェックする方が良いでしょう。読み取るべきものがなければ 'EOF'を返します。これはすべての標準入力関数に適用されます。使用している関数のドキュメントを調べて、入力の終わりを示すために返す関数を確認します。 'fgets()'が終了したことを伝えた後、 'feof()'や 'ferror()'を使ってその理由を知ることができます。 –

0

関数fgetsのdocumentionは言う:

シンテックス:

のchar * fgetsの(のchar * strの、int型NUM、ファイル*ストリーム);

(num-1)文字が読み込まれるか、改行またはファイルの終わりに到達するまでのいずれか早いほうになるまで、ストリームから文字を読み取り、C文字列としてstrに格納します。 改行文字はfgetsの読み込みを停止させますが、有効な文字と見なされるため、strにコピーされた文字列に含まれます。 C文字列の終わりを知らせるために文字が読み込まれた後、NULL文字が自動的にstrに追加されます。

ので、ここでのみ)ので、私は(uは関数freadを使用することをお勧め第一ライン 件まで読んでfgetsの

関連する問題