char s[]="question:Does it have eyes?"
我想检索由'分隔的两个字符串:'。
char question[10];
char content[100];
sscanf(s,"%[a-z]%[a-z]",question,content);
当sscanf()按空格检索字符串时,我无法得到完整的问题。我怎么能用sscanf()完全检索整个问题?感谢。
答案 0 :(得分:1)
您现有的代码几乎已经是您想要的了。特别注意
sscanf()按空格检索字符串
不完全正确。 sscanf()
将空格(包括不仅仅是空格字符)解释为%s
字段描述符的字段分隔符,但您也可以通过{{1}扫描字符串你正在做的字段描述符,它会扫描你告诉它扫描的任何字符。
此外,您需要告诉%[]
期望冒号,即使它不会被扫描到您的任何一个字符串中。因此,您可以像这样解决问题:
scanf()
第一个字段描述符最多可扫描9个字符,并将字符串终止符扫描到sscanf(s, "%9[^:]:%99[^\001]", question, content);
,接受question
以外的任何字符。然后它会扫描并忽略:
,并扫描最多99个不同于:
的字符到'\001'
。 content
是我认为在输入中不期望的字符中的任意选择。
另一方面,如果您希望扫描的字符串始终以文字字符'\001'
开头,那么您可能会感觉更好
"question:"
请记住,sscanf(s, "question:%99[^\001]", content);
的返回值会告诉您已成功扫描了多少输入字段,这可以告知您解析错误(例如不以sscanf()
开头的数据)。
第三方面,如果您希望扫描的字符串始终以文字字符"question:"
开头,并且您只想捕获所有内容,那么"question:"
有点重量级工作的工具。我是这样做的,而不是:
sscanf()
答案 1 :(得分:1)
倒置扫描设置和"%n"
使用char *content;
而不是char content[100];
char s[]="question:Does it have eyes?"
char question[10];
char *content;
int n = 0;
sscanf(s, "%9[^:]:%n",question, &n);
if (n == 0) Handle_Failure();
content = s+n;
答案 2 :(得分:0)
您是否考虑使用倒置扫描设备?例如,这里有两个:
char question[10];
char content[100];
sscanf(s,"%[^:]:%[^\n]",question,content);