如何将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
相关产品推荐
相关产品推荐

