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

如何将fgets读取到char数组中的逗号分隔整数字符串转为单个int值

解决方案

前置注意事项

  • 你当前定义的char buf[10]长度刚好匹配10,10,4,10的10个字符,但fgets读取内容后会在末尾自动补\0作为字符串终止符,实际使用建议将数组长度调大至少1位,避免字符串越界导致未定义行为。

方法1:sscanf格式化读取(适合已知数字数量的场景)

如果提前明确每行是4个逗号分隔的整数,直接用格式化读取即可,代码最简:

#include <stdio.h>

int main() {
    // 此处buf为fgets读取到的内容,示例直接赋值模拟
    char buf[12] = "10,10,4,10";
    int res[4];
    // 按逗号分隔的整数格式匹配读取
    sscanf(buf, "%d,%d,%d,%d", &res[0], &res[1], &res[2], &res[3]);
    
    // 遍历验证结果
    for(int i = 0; i < 4; i++) {
        printf("%d\n", res[i]);
    }
    return 0;
}

方法2:strtok分割后转整数(适合数字数量不固定的场景)

如果每行的数字数量不固定,可以先按逗号分割字符串,再逐个转换为整数:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char buf[12] = "10,10,4,10";
    int res[10]; // 按需调整存储数组的大小
    int count = 0;
    // 按逗号分割字符串
    char *piece = strtok(buf, ",");
    while(piece != NULL) {
        res[count++] = atoi(piece);
        piece = strtok(NULL, ",");
    }
    
    // 遍历验证结果
    for(int i = 0; i < count; i++) {
        printf("%d\n", res[i]);
    }
    return 0;
}

额外注意

  • strtok会修改输入的原字符串,如果后续需要保留buf的原始内容,需要先把buf拷贝到临时数组再执行分割操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:24:06