我想知道为什么之前调用了sscanf
之后i
的值是0
。我期望修改 i
的值。
我在 Windows 7 中使用 cygwin gcc,版本 3.4.4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
unsigned char a[] = {1, 2, 3, 4, 5};
int i = 0;
printf("\nread value %d\n", sscanf(&a, "%d", &i));
printf("\nvalue is %d\n", i);
printf("\nbuffer is %s\n", a);
}
输出是
read value is 0
value is 0
buffer is some special characters
最佳答案
首先,sscanf 的第一个参数应该是指向 char 的指针,但是您传递的是指向 char 数组的指针,这是错误的类型。不过,这与问题无关。
回答您的问题:sscanf(与其他 *scanf 函数一样)仅在字符串中匹配该值的格式说明符时才写入该值。因此,如果您有格式说明符“%d”,则只有当字符串以数字开头时,才会将一个 int 写入给定的 int 指针。正如您自己所说,您的字符串仅包含垃圾:值为 1 到 5 的(不可打印的)字符,后跟 a
之后内存中的任何内容。所以它不以数字开头,因此没有写入数字。
关于c - 为什么 sscanf 不填充变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015064/