2012-04-29 12 views
-2

なぜ次のプログラムが無限ループに陥るのですか?stdio.hを読み取っているときに無限ループが発生する

int main() 
{ 
    string fname = "C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include\\stdio.h"; 
    char line[985]; 

    ifstream file(fname.c_str()); 

    if(file == NULL) 
    { 
     cout<<"unable to open"; 
     exit(0); 
    } 

    while(!file.eof()) 
    { 
     file.getline(line,'\n'); 
     cout<<line<<'\n'; 
    } 
} 
+3

stdio.hには、この質問とは何の関係もありませんが –

答えて

2

getline()の第2引数はストリームサイズで、第3引数は区切り文字です。これに代えて

file.getline(line,'\n'); 

これで試してみてください。

file.getline(line,256,'\n'); 
+0

よく私はそれを試してみましたが、それはうまくいきませんでした。また、一番長い行の長さは282文字なので、「行」のサイズを必要な長さの3倍以上に設定しようとしましたが、まだ動作しませんでした。 – user1232138

+1

長さについて心配する必要はありません最長行の'getline()'は、指定された 'size'か、区切り文字に達するまで読み込みます。私はあなたのコードをLinux上でstdio.hへのパスで走らせました。正しく印刷されます。 –

+0

@Downvoter、理由を説明してください。 –

関連する問題