检查字符串是否为给定格式的C

问题描述

我要检查字符串是否为char,string,string格式。我尝试使用sscanf来获取数据,并检查其是否为我想要的格式,但是它不起作用。

int main()
{
    char buffer[1024];
    char c1;
    char c2[1024];
    char c3[1024];
    char c4[1024];

    fgets(buffer,1024,stdin);
    if (sscanf(buffer,"%c,%s,%s",&c1,c2,c3,c4) == 4)
    {
        printf("true\n");
    }
    else
    {
        printf("false\n");
    }
    
}

例如^,oo,48,gg应该返回true,因为它的格式为char,string,但是&&,10,&h,***将返回false,因为它的格式是string,string

解决方法

"%s"与任何非空格字符序列匹配,只要至少有1个字符。它将作为一个字符串扫描"oo,48,gg"

请改为使用"%[^,]"查找不是逗号的任何内容。

如果仅查找模式匹配项,而不需要保存数据,请使用*进行扫描,但不保存。否则使用宽度限制。

考虑fgets()保留'\n'

使用"%n"扫描到目前为止已扫描的字符串偏移量。

int n = 0;
sscanf(buffer,"%*c,%*[^,],\n]%n",&n);
if (n > 0 && buffer[n] == '\n') {
    printf("true\n");
} else {
    printf("false\n");
}

sscanf(buffer,"%c,%1023[^,]",&c1,c2,c3,c4) == 4将接受"^,oo,gg,zzz"。 IMO,一个错误。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...