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