EOF有更安全的替代方案吗?它在我的情况下不起作用
Is there a safer alternative for EOF? It's not working in my case
我正在做我的学校项目,我必须在其中处理 c/c++ 中的文件。 我担心使用while((c=fgetc())!=EOF)
,因为:
如果文件的二进制代码包含与EOF具有相同值的11111111
并且程序意外完成怎么办?
这是一个示例代码,其中我首先创建一个包含-1
的二进制代码,程序在真正到达文件末尾之前完成。
int main()
{
FILE *p;
fopen_s(&p, "my.binn", "wb");
char c;
char result;
for (int t = 0; t < 3; t++)
{ //putting some bytes in file
result = 0;
for (int r = 0; r < 8; r += 2)
{
result |= (1 << (7 - r));
}
putc(result, p);
}
result = 0;
for (int r = 0; r < 8; r++)
{ //putting a byte of 11111111
result |= (1 << (7 - r));
}
putc(result, p);
for (int t = 0; t < 3; t++)
{ //again putting some bytes in file
result = 0;
for (int r = 0; r < 8; r += 2)
{
result |= (1 << (7 - r));
}
putc(result, p);
}
fclose(p);
fopen_s(&p, "my.binn", "rb");
while ((c = fgetc(p)) != EOF)
{ //here this loop was expected to continue until end of file(7 bytes) but it prints only three stars
cout << "*";
}
fclose(p);
return 0;
}
谁能帮我解决这个问题??
EOF
是一个(宏为a(负整数。fgetc
将一个无符号的字符转换为整数。只要无符号字符的范围小于 int 的范围,这种转换永远不会导致负数,在这种情况下,与EOF
没有重叠。我不知道 sizeof(int( == 1 的奇特系统如何处理这个问题。
但是在您的尝试中,您正在比较赋值操作的结果(左值(和左侧操作数(从 int 转换的字符(。因此,您的担忧是有道理的。
要修复程序,请将输入读入 int 变量,将其与EOF
进行比较,然后转换为 char。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- 为什么我的数组双精度函数不起作用?
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- C++ - 块不移动,我的数组不起作用
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- binary_search() 函数在我的函数体中不起作用
- 为什么我的打印功能不起作用?链表
- 为什么我的 arduino 按钮在 0 和 1 以外的端口上不起作用?
- 为什么我的数组或函数不起作用?
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 我有一个应该打印数组的函数,但由于某种原因它不起作用
- 当我的阵列达到一定大小时,Qt 不起作用
- 如果我更改函数输入,我的递归不起作用?
- 断言无符号的 int 确实是积极的不起作用?