gpt4 book ai didi

c - 这个 sscanf() 格式字符串有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:18 26 4
gpt4 key购买 nike

我正在尝试解析一个简单的字符串:一个来自集合“rgbcmyw”的字符,后跟一个来自集合“slh”的字符,然后是一个整数。

risk:9008:~$ cat test-scanf.c
#include <stdio.h>

int main(int argc, char ** argv) {
char c,m;
int s;

printf("Scanned %d elements.\n", sscanf(argv[1], "%[rgbcmyw]%[slh]%d", &c, &m, &s));
printf("Scanned:\n\tc = %c (%d)\n\tm = %c (%d)\n\ts = %d\n",c,c,m,m,s);

return 0;
}
risk:9012:~$ gcc test-scanf.c && ./a.out rs40
Scanned 3 elements.
Scanned:
c = (0)
m = s (115)
s = 40
risk:9013:~$

为什么将零分配给“c”?

编辑:解决方案

需要为被扫描的字符留出空间加上一个nul终止符:

#include <stdio.h>

int main(int argc, char ** argv) {
char c[2],m[2]; /* Need space for the character *and* the 'nul' termination. */
int s;

printf("Scanned %d elements.\n", sscanf(argv[1], "%[rgbcmyw]%[slh]%d", c, m, &s));
printf("Scanned:\n\tc = %s\n\tm = %s\n\ts = %d\n",c,m,s);

return 0;
}

最佳答案

您正在使用 string 转换说明符和 char 指针。 %[foo] 需要一个指向 char 的指针(并且必须有足够的空间容纳字符串中的所有字符,外加一个终止空字节),而不仅仅是指向一个字符

关于c - 这个 sscanf() 格式字符串有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528833/

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