这段代码的输出:
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/