c - 使用 sscanf 从字符串中获取输入
问题描述
我从用户那里得到以下字符串作为输入:"id,name,age,grade,country,city"
-id 仅由数字 0-9 组成 -name 由 a-zA-z 字母组成 -grade 仅由数字 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"
解决方案
正如@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
推荐阅读
- javascript - 从容器中获取数据
- python - 如何有效地将级别添加到熊猫系列索引以创建多级?
- ios - 具有系统字体、粗体和字距调整的 UIButton 子类
- swift - 快速通知未触发
- excel - 多次运行后重复宏出错
- google-chrome - Chrome 过滤掉 SameSite:None 安全 cookie
- xml - 将一列中的 XML 对象解析为多行,并允许在最后一行之后出现下一个 XML 对象
- javascript - 如何连接到数组状态的最后一项?
- javascript - 表单验证不适用于名称输入框
- datetime - 如何更改 showDatePicker 输入格式颤动