文件的第一行必须是我读入firstline [2]的两位数字。我使用sscanf从该缓冲区读取数据并将其存储到一个int中,以表示文件中的行数(不包括第一行)。如果有第三个字符,我必须退出并输入错误代码。
我尝试引入新的char缓冲区thirdchar [1]并将其与新行(10或'\ n')进行比较。如果thirdchar不等于换行符,则应以错误代码退出。稍后在我的程序中,我使用sscanf读取第一行并将该数字存储到一个称为numberoflines的int中。当我引入thirdchar时,它会在numberoflines的第一行末尾附加一个额外的两个零。
//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的功能?有没有更好的方法来实现这一目标?谢谢。
--------------- UPDATE ------------------
所以我已经更新了代码,以使用std :: string和std :: getline:
std::string firstline;
std::getline(file, firstline);
当我尝试打印firstline的值时出现以下错误
$1 = Python Exception <class 'gdb.error'> There is no member named _M_dataplus.:
答案 0 :(得分:1)
sscanf
要求输入字符串为null-terminated。您没有向其传递以null终止的字符串,因此它的行为不符合预期。
如建议的那样,最好使用std::getline
读取字符串并将std::string
转换为整数。