c - 如何使用C逐行读取txt文件(int,未知长度)?

标签 c arrays scanf sizeof fgets

我想对文本文件中的数据进行合并排序。(逐行)

为了使合并排序工作,我必须逐行读入数据,并将它们放入一个数组中以便对它们进行排序。 (我们只知道每行最多有10000个整数) 所以我做了研究并尝试了这些方法:

1。使用 fgets 和 strtok/strtol。

问题:我不知道 char 数组的最大长度。此外,声明一个巨大的数组可能会导致缓冲区溢出。

来源:How many chars can be in a char array?

2。使用fscanf输入整数数组。

问题:相同。我不知道一行中有多少个整数。所以我不会接受“%d”部分。(不知道应该有多少)

3。使用fscanf以char数组的形式输入,使用strtok/strtol

问题:相同。由于我不知道长度,所以我不能做类似的事情

char *data;
data = malloc(sizeof(char) * datacount);

因为“数据计数”未知。

有什么办法吗?

更新

示例输入:

-16342 2084 -10049 10117 2786
3335 3512 -10936 5343 -1612 -4845 -14514

示例输出:

-16342 -10049 2084 2786 10117
-14514 -10936 -4845 -1612 3335 3512 5343

最佳答案

你说:

We only know that there are at most 10000 integer per line

所以就去吧。符合标准的编译器(和环境)应该能够定义最多包含 65,535 个对象的数组。 10,000 远远不够,所以只需定义一个静态数组:

int a[10001], n;

int main() {
    // Open file
    n = 0;
    while (fscanf(fp, " %d", &a[n]) == 1) {
        // Process a[n]
        n++;
    }
}

如果您了解平台规范(例如 sizeof(int) == 4),则可以假设整数长度。例如,32 位整数的最大长度为 11 个字符(-2147483648)左右。然后,您可以定义一个具有计算长度的 char 数组。

关于c - 如何使用C逐行读取txt文件(int,未知长度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728400/

相关文章:

java - Magic Square Method 需要输出是否是幻方以及行列之和

c - 我无法将十六进制值扫描到 C 中的数组中

c - 想要从C中的结构体内存中访问结构体指针类型的数据

c - 我怎样才能把它分解成函数?

arrays - 复合类型数组的正确语法

arrays - Tcl 中来自 *csv 输入文件的数组分配

c++ - 无法解析 EXC_BAD_ACCESS(代码=EXC_I386_GBFLT)

c - 用C语言从xml中解析一个字符?

c - gcc 不会正确包含 math.h

c - 在基于 CC2538 的 RE-Mote 板中使用浮点用于带有 Contiki OS 的 CoAP 服务器