scanf函数分隔符和空字符串 [英] Scanf delimiter and empty string
问题描述
我有一个问题,使用带分隔符的sscanf()的值来读取。
I'm having a problem reading in values using sscanf() with delimiters.
sscanf(line, "%15[^:]:%20[^:]:%d:%d:%50[^:]:%25[^:]:%25[^\n]",
string1, string2, &value1, &value2, string3, string4, string5);
有只有当行是像一个问题:
There's only a problem when line is something like:
abc:defg:1:2::hijk:no
当我打印出来的字符串/值,一切都很正常,直到字符串3。它输出一些奇怪的字符,然后'串,输出的空白处,并STRING5输出一个类似的怪异字符。
When I print out the strings/values, everything is normal up until 'string 3'. It outputs some weird character, then 'string4' outputs an empty space and string5 outputs a similar weird character.
任何人有任何想法,我怎么能在正确的价值观扫描?
Anybody have any idea how I can scan in the right values?
编辑:我的意思是ABC:DEFG:1:2 :: HIJK:不,不是ABC:DEFG:1:2 :: HIJK:LM:没有
edit: I meant abc:defg:1:2::hijk:no, not abc:defg:1:2::hijk:lm:no
推荐答案
使用 strsep
像下面
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strsep(char **sp, const char *sep);
int main(){
char line[] = "abc:defg:1:2::hijk:no\n";
int value1, value2;
char string1[16];
char string2[20];
char string3[51];
char string4[26];
char string5[26];
char *p = line;
/*
sscanf(line, "%15[^:]:%20[^:]:%d:%d:%50[^:]:%25[^:]:%25[^\n]",
string1, string2, &value1, &value2, string3, string4, string5);
*/
strcpy(string1, strsep(&p, ":"));//or strncpy, etc.
strcpy(string2, strsep(&p, ":"));
value1 = atoi(strsep(&p, ":"));
value2 = atoi(strsep(&p, ":"));
strcpy(string3, strsep(&p, ":"));
strcpy(string4, strsep(&p, ":"));
strcpy(string5, strsep(&p, ":\n"));
printf("%s %s %d %d \"%s\" %s %s\n",
string1, string2, value1, value2, string3, string4, string5);
return 0;
}
请参阅 strsep
以下链接。结果
strsep
strsep
不是一个标准功能。结果
如果不存在的话,可以实现如下(例如):
strsep
is not a standard function.
if it does not exist, be implemented as follows(E.g) :
char *strsep(char **sp, const char *sep){
char *p, *s;
if (sp == NULL || *sp == NULL || **sp == '\0') return(NULL);
s = *sp;
p = s + strcspn(s, sep);
if (*p != '\0') *p++ = '\0';
*sp = p;
return(s);
}
这篇关于scanf函数分隔符和空字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!