第一个字符在ifstream中消失了

时间:2010-11-18 19:07:57

标签: c++ ifstream

为什么这段代码打印出char,没有第一个字符?它说ocalhost而不是localhost。感谢帮助。

#include <winsock2.h>
#include <mysql/mysql.h>
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;

int main ()  {    
int b = 0;
char * pch;
int stringLength = 0;
char textRead[50];
ifstream infile("config.ini", ios::in | ios::binary);            
if(!infile) {
            cout << "ERROR: config.ini not found!\n";
            system("pause");
            exit(0);
}

infile >> textRead;
stringLength = strlen(textRead);
pch=strchr(textRead,'"');
while(pch != NULL) {
          infile.seekg(pch-textRead-1);
          infile >> textRead;
          pch = strchr(pch+1,'"');
}
cout << textRead;
infile.close();

2 个答案:

答案 0 :(得分:0)

在你的while循环中你打电话:

  infile >> textRead;
  pch = strchr(pch+1,'"');

当您尝试在第二行中运行strchr时,它仍然会返回您在textRead中的上一个字符串,而不是最近提取的字词。

不幸的是,我无法推断出你真正想要做的事情,所以我无法提供有关如何修复它的建议。

答案 1 :(得分:0)

我猜测config.ini的内容,因为你没有提供它,但看起来ifstream看起来很好。在cout << textRead << endl;之后加infile >> textRead;进行检查。这就是我用于config.ini

的内容
localhost = "foo"

你与seekg和朋友的逻辑似乎已经破裂了。 seekg并不意味着用于支持解析(在您的情况下,跳过引号);它意味着在需要时跳过大块文件,这样你就不会浪费时间阅读它。老实说,我不确定你在做什么,因为pch-textRead-1可能是-1,如果第一个字符是报价。

另一件事是infile >> textRead;不读取一行,它读取一个单词,并丢弃前导空格。

为了记录,我省略了

#include <winsock2.h>
#include <mysql/mysql.h>
#include <windows.h>

因为不需要它。