gpt4 book ai didi

c++ - 从文件的一行中读取字符

转载 作者:行者123 更新时间:2023-11-28 04:11:28 32 4
gpt4 key购买 nike

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

我尝试引入一个新的字符缓冲区 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 的作用吗?有没有更好的方法来实现这个?谢谢。

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

所以我更新了我的代码以使用 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 转换为整数。

进一步阅读 here如果使用 C++11 以上版本,或 here否则。

关于c++ - 从文件的一行中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676641/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com