因此,我在下面包含了我成功工作的代码,它包含一个.txt文件,大约160万行,每行一个字。这将成功地读取,qsort按字母顺序排列单词,然后输出到out文件。然而,问题在于我所理解的数组的大小限制。数组中最多有100万行,它在不到2-3秒内工作并完成,但超过100万行,并且有一个分割错误。
我已经看过malloc了,但是它没有输入到数组中?而文件输入不能输入到qsort中?有什么建议怎么绕过这件事吗?16行数组指定txt中没有超过15个字符(chars+1)的单词。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static void sort_a(void *array, unsigned n);
static int cmpr(const void *a, const void *b);
int main(void)
{
static const char filename[] = "input.txt";
static const char filename_out[] = "output.txt";
int i = 0;
int j = 0;
FILE *file = fopen(filename, "r");
FILE *file_write = fopen(filename_out, "w");
char line[16];
char *line_array[1000001]; //works sub 1 Million
if (file != NULL){
while (fgets(line, sizeof line, file) != NULL) {
// Trim the newline character
line[strcspn(line, "\n")] = '\0';
// Stop processing if line_array is full
if (i < sizeof line_array / sizeof *line_array) {
line_array[i++] = strdup(line);
}
else {
break;
}
}
fclose(file);
sort_a(line_array, i);
for (j = 0; j < i; j++) {
fprintf(file_write, "%s\n", line_array[j]);
}
fclose(file_write);
// Clean up memory
for (j = 0; j < i; j++) {
free(line_array[j]);
}
}
else {
perror(filename);
}
return 0;
}
int cmpr(const void *a, const void *b) {
return (strcmp(*(char **)a, *(char **)b));
}
void sort_a(void *array, unsigned n) {
qsort(array, n, sizeof(const char *), cmpr);
}发布于 2022-08-31 14:42:08
在这种情况下。数组大小大于系统限制,出现分割错误。可以更改系统堆栈限制:
https://stackoverflow.com/questions/73556543
复制相似问题