C++ 原生类型 char 可以保存文件结尾字符吗?

标签 c++ char eof

标题很容易理解。

char c = std::cin.peek(); // sets c equal to character in stream

我刚刚意识到原生类型 char 可能无法保存 EOF。

谢谢, 核磁共振

最佳答案

简短回答:否。使用 int 而不是 char

稍微长一点的答案:不能。如果你能从一个函数中得到一个字符或值EOF,比如C的getchar和C++的peek,显然一个普通的 char 变量将不足以保存所有有效字符 EOF

更长的答案:这取决于,但它永远不会像您希望的那样工作。

C 和 C++ 具有三种字符类型(“宽”类型除外):charsigned charunsigned char。普通 char 可以是有符号的或无符号的,这因编译器而异。

EOF 的值是一个负整数,通常为 -1,因此显然您不能将其存储在 unsigned char 或普通的 char 未签名。假设您的系统使用 8 位字符(几乎所有系统都使用),EOF 将转换为(十进制)255,您的程序将无法运行。

但是如果你的 char 类型是有符号的,或者如果你使用 signed char 类型,那么是的,你可以在其中存储 -1,所以是的,它可以按住 EOF。但是当您从文件中读取代码为 255 的字符时会发生什么?它将被解释为 -1,即 EOF(假设您的实现使用 -1)。因此,您的代码不仅会在文件末尾停止读取,还会在找到 255 个字符时立即停止读取。

关于C++ 原生类型 char 可以保存文件结尾字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851525/

相关文章:

将 char 转换为 char 数组或将 char 数组转换为 char?

c++ - 如何将 litere 与 "("的 char 数组进行比较

c - Flex - 检测 EOF 之前的单词

java - 如何为 Java InputStream 元素发送 EOF?

c - Linux重定向到C程序-文件读取

c++ if语句具有复合值

c++ - 我如何在 SDL2 窗口上使用 Cairo 绘制一条白色直线?

c++ - 避免使用虚方法构造具有空基类的构造函数

c++ - C++ 编译器是否优化重复的函数调用?

C 中指向指针数组的 Char 指针