首页 > 解决方案 > 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 

任何帮助表示赞赏。

标签: cscanf

解决方案


男人扫描

字符串输入转换存储一个终止空字节('\0')来标记输入的结束;最大字段宽度不包括此终止符

也就是说,存储字符串的缓冲区需要至少比最大字段宽度大一个字节,以考虑 NUL 终止符。因此,增加所有数组的大小以考虑 NUL 终止符。

char str[] = "AbcDefGhi";
char first[4], second[4], third[4];

推荐阅读