我正在从一个文件中提取一些文本并将其写入另一个文件。
当我试图打开并阅读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);
}

有人能解释吗?
另外,如果有人有类似的问题,这段代码在基于英特尔的ubuntu系统上运行良好,但是使用ubuntu的freescale系统会导致一个问题。所以要小心,总是使用int来保证安全。

最佳答案

EOF是一个int而不是一个char

char cTemp;

应该是:
int Temp;

解释见:
http://c-faq.com/stdio/getcharc.html

09-12 19:26