You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置sscanf格式,使逗号被识别为格式分隔符而非字符串

解决sscanf将逗号视为字符串内容的问题

原问题中,%s格式符会匹配所有非空白字符,因此它会把abcd,整个当作字符串读入,跳过了格式串里的逗号,导致后续%d无法匹配到数字10,val保持初始值0。

要让扫描器把逗号当作格式的一部分,推荐两种实用方法:

方法一:用%[^,]限定字符串匹配范围

%[^,]表示匹配除逗号之外的所有字符,能精准读取逗号前的abcd,之后格式串里的逗号会和输入字符串里的逗号对应,顺利读取后续整数。

修改后的代码:

#include <stdio.h>

int main()
{
        char str[255];
        int val;

        sscanf("(abcd, 10)", "(%[^,], %d)", str, &val);
        printf("string: %s; int: %d\n", str, val);
}

运行输出:

string: abcd; int: 10

方法二:手动定位并跳过逗号(不推荐)

先读取字符串,再通过指针偏移找到逗号位置,跳过逗号后读取整数,这种方法繁琐且易出错,示例代码如下:

#include <stdio.h>

int main()
{
        char str[255];
        int val;
        char *ptr = "(abcd, 10)";
        
        sscanf(ptr, "(%s", str);
        while (*ptr != ',') ptr++;
        sscanf(ptr+2, "%d)", &val);
        
        printf("string: %s; int: %d\n", str, val);
}

优先选择第一种方法,通过格式控制符直接限定匹配范围,简洁且可靠性更高。

内容的提问来源于stack exchange,提问作者milanHrabos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:31:32