我试图解析一个简单的字符串:来自集合中的一个字符" 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:~$
为什么将零分配给&#39; c&#39;
编辑:解决方案
正在扫描的角色需要空间加上 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;
}
答案 0 :(得分:3)
您正在使用string
转化说明符和char
指针。 %[foo]
需要一个指向char
的指针(并且必须有足够的空间容纳字符串中的所有字符,加上一个终止的空字节),而不仅仅是指向char
的指针。
答案 1 :(得分:2)
您的代码将错误类型的参数传递给sscanf()
。 “%[]
说明符需要char *
指针。