c - 为什么 sscanf 不填充变量?

标签 c gcc printf scanf

我想知道为什么之前调用了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/

相关文章:

无法在双向链表中从尾部遍历到头部

c - 有什么有效的方法可以编写DRBFM来进行代码更改吗?

c - C 中无自旋锁的非阻塞套接字接受

c - 为什么我的带有 scanf 的 for 循环没有被执行?

c - 动态库文件的全局变量加载到哪里了?

c - 如何处理 C 中的多级包含?

php - 使用 sprintf 打印浮点值

c - GCC 下与 Cortex-M0 的变量对齐

c - 如果 fprintf 之前引发了错误,它会怎么做?为什么?

multidimensional-array - F# 打印出一个二维字符串数组