我文件的第一行必须是我读入firstline [2]的两位数字。我使用sscanf从该缓冲区读取数据并将其存储到一个int中,以表示文件中的行数(不包括第一行)。如果有第三个字符,我必须退出并输入错误代码。

我尝试引入新的char缓冲区thirdchar [1]并将其与新行(10或'\ n')进行比较。如果thirdchar不等于换行符,则应以错误代码退出。稍后在我的程序中,我使用sscanf读取第一行并将该数字存储到一个称为numberoflines的int中。当我引入thirdchar时,它会将numberoflines的额外两个零附加到firstline的末尾。

//If the first line was "20"
int numberoflines;
char firstline[2];
file.get(firstline[0]);//should be '2'
file.get(firstline[1]);//should be '0'

char thridchar[1];
file.get(thirdchar[0]);//should be '\n'

if (thirdchar !=10){exit();}//10 is the value gdb spits out to represent '\n'

sscanf(firstline, "%d", &numberoflines);//numberoflines should be 20


我调试了这个,并且firstline和thirdchar是期望的值,但是numberoflines变成了2000!我已经删除了与thirdchar有关的代码,它可以正常工作,但不满足要求它是2位数字的要求。我是否误解了sscanf的功能?有没有更好的方法来实现这一目标?谢谢。

---------------更新------------------

所以我已经更新了代码以使用std :: string和std :: getline:

std::string firstline;
std::getline(file, firstline);


当我尝试打印第一行的值时出现以下错误

$1 = Python Exception <class 'gdb.error'> There is no member named _M_dataplus.:

最佳答案

sscanf要求输入字符串为null-terminated。您没有向其传递以null终止的字符串,因此它的行为不符合预期。

如建议的那样,最好使用std::getline读取字符串并将std::string转换为整数。

如果使用C ++ 11或更高版本,请进一步阅读here,否则请阅读here

08-05 14:30