gpt4 book ai didi

c - sscanf 期望字符类的参数类型是什么?

转载 作者:行者123 更新时间:2023-12-05 01:29:12 26 4
gpt4 key购买 nike

我一直在尝试让 sscanf 使用字符类识别一种相当简单的格式。我注意到,当我为 sscanf 提供 char* 以匹配字符类时,它也会覆盖前一个字节,就好像它需要一个指向 2 个字节的指针一样。

我要完成的事情的简化版本:

#include <stdio.h>

int main(void)
{
char num1;
char num2;
int s;
s = sscanf("1,2", " %[01234567] , %[01234567]", &num1, &num2);
printf("%d %c %c\n", s, num1, num2);
return 0;
}

预期输出:2 1 2

实际输出:2 2

但是,如果我将 char 替换为 short(或其他大于字节的内容),那么它会按预期工作,但我会收到有关 format expects type 的警告字符*

参数实际上应该是什么类型,或者我是否犯了其他错误?

最佳答案

sscanf 需要一个字符串。

char num1[BIG_ENOUGH], num2[BIG_ENOUGH];
s = sscanf("1,2", " %[01234567] , %[01234567]", num1, num2);

当然这是完全不安全的,因为扫描的字符串加上终止空值可能比缓冲区长并导致缓冲区溢出。

不幸的是,C 类型系统无法区分指向字符数组开头的指针和指向单个字符的指针,因此编译了问题中的代码。

关于c - sscanf 期望字符类的参数类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com