0

ファイルからいくつかのテキストをgrepingしてawkingし、それを別のファイルに書き込んでいます。

何かを行うために log_2 を開いて読み取ろうとすると、grep が何らかの文字列を返した場合に問題なく動作します。

しかし、grep 自体が何も返さない場合、私のコードは無限ループに入ります。ループで読み取られている文字を印刷しようとしましたが、「 ÿ 」が無限に印刷されます。

system("egrep 'Security = |State = ' log.txt > log_1.txt");
system("awk -F ' Security = | State = { Interface=' '{print $2}' log_1.txt > log_2.txt ");

// The exact strings to be greped and awked are different. Cant write them here.    

FILE *pReadFile;
char cTemp;

pReadFile=fopen ( "log_2.txt" , "r+");

if (pReadFile==NULL )
{
    std::cout << ("Error opening Config file");
    fclose(pReadFile);
    return ;
}

cTemp = fgetc (pReadFile);

if(cTemp == EOF)    
return ; 


while( cTemp != EOF )
{
      // Do Something

      cTemp = fgetc (pReadFile);
}

誰か説明できますか?


誰かが同様の問題を抱えている場合に備えて、このコードは Intel ベースの Ubuntu システムでは正常に動作しますが、Ubuntu を使用する Freescale システムでは問題が発生します。したがって、注意して、常に int を使用して安全を確保してください。

4

1 に答える 1

4

EOFは ではありintませんchar

char cTemp;

次のようにする必要があります。

int Temp;

説明はこちらをご覧ください:

http://c-faq.com/stdio/getcharc.html

于 2012-08-20T07:55:39.260 に答える