gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:17:33 25 4
gpt4 key购买 nike

标题很容易理解。

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/

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