这段代码的输出:
const char *buff = "*_2D 1"; char field[10]; int flag; sscanf(buff,"%s %d",field,&flag); printf("field:%s flag:%i\n",flag);
是字段:* _ 2D标志:1
但是通过将int更改为bool会导致奇怪的行为:
const char *buff = "*_2D 1"; char field[10]; bool flag; sscanf(buff,flag);
输出为field:flag:1
任何人都可以解释这里发生了什么?我会认为bool会被解释为一个int,它似乎是,但字符串的其余部分消失了.
解决方法
想象一下,如果bool只是一个字节,而不是int使用的四个(甚至八个).然后告诉sscanf& flag是指向int的指针将最终覆盖堆栈中其他地方的三个或七个字节 – 这可能正好在你的字段变量之上.该空间将填充0个字节,有效地终止您的字符串.