我从用户那里得到以下字符串作为输入:"id,name,age,grade,country,city"
-id仅包含数字0-9 -name由a-zA-z字母组成 级仅包含数字0-9 -country由a-zA-z字母,空格和'-'破折号组成。 -city由a-zA-z字母,空格和'-'破折号组成。
我正在尝试将每个字段都设置为自己的字符串。
我的代码是:
char id[MAX_STRING_SIZE], name[MAX_STRING_SIZE], grade[MAX_STRING_SIZE], age[MAX_STRING_SIZE],
country[MAX_STRING_SIZE],city[MAX_STRING_SIZE];
sscanf(userInput,SEPARATOR,id,name,grade,age,country,city);
其中userInput
是形式为"id,name,age,grade,country,city"
和const char SEPARATOR[] = "%[^,],%[^,],%[^,],%[^,],%[^,\n],%s";
但是,此代码会因某些输入而中断,例如"id,,age,grade,country,city"
答案 0 :(得分:1)
按照@WilliamPursell的建议,这是您可以代替sscanf做的事情
char* field[6];
field[0] = userInput;
for (int n=0, i=1; userInput[n] && (i < sizeof(field)/sizeof(field[0])); ++n)
{
if (userInput[n] == ',')
{
userInput[n] = '\0';
field[i] = &userInput[n+1];
++i;
}
}
可能有必要先复制userInput