2013-03-29 37 views
0

我想字符串“abc 123 456”拆分成字符串(“ABC”)和2号(123456)。我应该在下面的代码中填写什么格式?什么是字符串sscanf的格式“ABC 123 456”

char *s; 
int a,b; 
sscanf("acb 123 456", format, s, &a, &b); 
+1

你应该声明S作为聊天的阵列,而不是一个指针。 – selbie

+0

见的POSIX描述['的sscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html)有关如何用'的sscanf的复杂细节()'。 –

回答

3

你想:

"%s%d%d" 

但你也需要分配缓冲空间,让您提取字符串:

char s[100]; 
int a,b; 
sscanf("acb 123 456", "%s%d%d", s, &a, &b); 
+1

字符串的初始化并不重要; 'sscanf()'也会这样做(虽然它会简单地以null结束它,而不是归零所有未使用的空格)。你没有指定字符串有多大,它是使用'%99s'读入一个100字节的字符串是一个好主意(注意关闭的情况的一个长!)。这也是测试的转换是一个好主意:'如果(的sscanf( “ABC 123 456”, “%99秒%d%d”,S&A&B)= 3!)...转换失败...' 。 –

+0

@Charles,应该不会是 “%s%d%d”? – Ben

+0

@Ben:至少在这个例子中空格并不重要。 '%s'跳过前导空格,然后停在输入的第一个空格处; '%d'操作总是跳过前导空白。添加空格在这里不会造成任何伤害;它不会有任何区别。有时候,增加空间确实有所作为。例如,'%c'转换说明符不会跳过空格,但如果格式字符串中有空格,则会跳过前导空格,并且'%c'匹配第一个非空格字符。 –

相关问题