提问人:Aiman_A 提问时间:8/17/2019 最后编辑:Aiman_A 更新时间:8/18/2019 访问量:216
seekp/g 和 tellp/g 无法正常工作
seekp/g and tellp/g does not work properly
问:
每当我尝试在对象上使用函数并使用该函数时,它都无法正常工作,并且不会在“cstr”变量中存储任何内容。并且它不会报告任何使流无效的问题,例如tellp/g
seekp/g
fstream
fstream::getline(cstr, bufsize)
failbit
badbit
示例代码:它的作用是逐行读取它,每次读取时它都会跳转到文件的末尾,并打印下一行从文件开头开始的偏移量。
int main()
{
// Prepare file
fstream f("test.txt", fstream::ate | fstream::in | fstream::out);
// Prepare needed data for production
auto end_mark = f.tellg();
size_t count{0};
char c[64];
// Go back to the beginning
f.seekg(0, fstream::beg);
while(f && f.tellg() != end_mark && f.getline(c, 64))
{
count += f.gcount();
auto mark = f.tellg();
// Go to the end
f.seekp(0, fstream::end);
f << count; // print the next line's offset
if(mark != end_mark) f << " ";
// print results on shell ..For debug purposes
cout << c << " - " << count << endl;
// Go back to the last read point
f.seekp(mark);
}
return 1;
}
测试 .txt:
abcd
efg
hi
j
执行后的测试 .txt:
abcd
efg
hi
j
5 6 7 8
但预期的是:
abcd
efg
hi
j
5 9 12 14
shell 的输出是:
abcd - 5
- 6
- 7
- 8
请注意,c 变量中没有任何内容存储
但对 shell 的期望是:
abcd - 5
efg - 9
hi - 12
j - 14
我想指出的是,只有 and 函数错过了该函数。使用以下代码:tellp/g()
seekp/g()
fstream::getline()
int main()
{
// Prepare file
fstream f("test.txt", fstream::in | fstream::out);
size_t count{0};
char c[64];
while(f && f.getline(c, 64))
{
count += f.gcount();
// print results on shell ..For debug purposes
cout << c << " - " << count << endl;
}
return 1;
}
注意:tellp/g(
) 和 seekp/g()
函数被剥离
shell 输出以下内容:
abcd - 5
efj - 9
hi - 12
j - 14
有人可以告诉我为什么它会这样吗,请我试图理解这种奇怪的行为 我正在使用 GCC-6.3.0-1 进行编译 如果您有任何额外的细节,请告诉我
编辑:
我已将编译器更新到 GCC-8.2.0-3 并使用 -std=c++11/14/17 选项正常编译,但仍然面临同样的问题...... 任何建议将不胜感激
答: 暂无答案
评论
f << count;
f << count