gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:49:16 27 4
gpt4 key购买 nike

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

为了使合并排序工作,我必须逐行读入数据,并将它们放入一个数组中以便对它们进行排序。 (我们只知道每行最多有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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com