这段代码的输出:
@H_404_15@解决方法
- 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个字节,有效地终止您的字符串.