c - C使用sscanf将字符串拆分成块?
问题描述
我正在尝试编写一个程序来将字符串拆分为前 3 个字符,接下来的 3 个字符,然后是特定字符串的最后 3 个字符。
int main(int argc, char *argv[])
{
char str[9] = "AbcDefGhi";
char first[3], second[3], third[3];
int ret;
ret = sscanf(str, "%3s%3s%3s", first, second, third);
printf("# variables: %i\n", ret);
printf("1: %s\n", first);
printf("2: %s\n", second);
printf("3: %s\n", third);
printf("whoops");
return 0;
}
但是当我运行它时,输出是
# variables: 3
1: AbcDefGhi
2: DefGhi
3: Ghi
whoops
而且我要
# variables: 3
1: Abc
2: Def
3: Ghi
whoops
任何帮助表示赞赏。
解决方案
男人扫描:
字符串输入转换存储一个终止空字节('\0')来标记输入的结束;最大字段宽度不包括此终止符。
也就是说,存储字符串的缓冲区需要至少比最大字段宽度大一个字节,以考虑 NUL 终止符。因此,增加所有数组的大小以考虑 NUL 终止符。
char str[] = "AbcDefGhi";
char first[4], second[4], third[4];
推荐阅读
- android - 如何滚动滚动视图到内部视图的位置
- python - 在 Python 中为变量赋值的问题
- jestjs - 开玩笑 toBeCalledWith 和 toHaveBeenCalledWith 之间的区别
- python - 用于在类中注册标签的 Python 装饰器
- scala - Spark Dataframe 过滤器优化
- php - 如何通过laravel中的嵌套关系进行查询
- c++ - 无法获得窗口c ++的像素颜色
- html - 为什么系统之间会缺少字形?
- rasa-nlu - Rasa init 无法执行
- javascript - 如何使用 firebase auth 重新发送 OTP