c++ - 为什么 sscanf 不能正常使用 bool 类型

标签 c++ c boolean scanf

这段代码的输出:

const char *buff = "*_2D 1";
char field[10];
int flag;
sscanf(buff, "%s %d", field, &flag);
printf("field:%s flag:%i\n", field, flag);

field:*_2D flag:1

然而,将 int 更改为 bool 会导致奇怪的行为:

const char *buff = "*_2D 1";
char field[10];
bool flag;
sscanf(buff, "%s %d", field, &flag);
printf("field:%s flag:%i\n", field, flag);

输出为field: flag:1

谁能解释一下这里发生了什么?我原以为 bool 会被解释为 int,看起来是这样,但字符串的其余部分消失了。

最佳答案

想象一下,如果 bool 只是一个字节,而不是 int 使用的四个(甚至八个)字节。然后告诉 sscanf &flag 是一个指向 int 的指针,最终会覆盖堆栈中其他地方的三个或七个字节——这可能是就在您的 field 变量之上。该空间将填充 0 个字节,从而有效地终止您的字符串。

关于c++ - 为什么 sscanf 不能正常使用 bool 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693493/

相关文章:

c++ - 如何为一个我不知道其真实类型的对象分配内存? C++

c++ - QtRPT 连接错误,没有匹配函数调用到 reportWindow::connect

c - #define 函数给了我意想不到的结果

java - 将 boolean 对象数组转换为 boolean 原始数组?

c++ - 如何接受后缀和中缀表示法中的负值?

c++ - 将 boost::thread 与 wxWidgets GUI 混合时出现 "Unhandled exception"错误

c - 将函数指针名称传递给 C 预处理器

c - C 中单词字典顺序排名

c - boolean 数据类型 随机整数

.net - Nullable<Int32> 的大小是多少?