首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按字母顺序输入160万行(单词) .txt

按字母顺序输入160万行(单词) .txt
EN

Stack Overflow用户
提问于 2022-08-31 13:20:16
回答 1查看 61关注 0票数 0

因此,我在下面包含了我成功工作的代码,它包含一个.txt文件,大约160万行,每行一个字。这将成功地读取,qsort按字母顺序排列单词,然后输出到out文件。然而,问题在于我所理解的数组的大小限制。数组中最多有100万行,它在不到2-3秒内工作并完成,但超过100万行,并且有一个分割错误。

我已经看过malloc了,但是它没有输入到数组中?而文件输入不能输入到qsort中?有什么建议怎么绕过这件事吗?16行数组指定txt中没有超过15个字符(chars+1)的单词。

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-31 14:42:08

在这种情况下。数组大小大于系统限制,出现分割错误。可以更改系统堆栈限制:

  1. ulimit -s //获取当前系统堆栈限制
  2. ulimit -s 102400 //将限制更改为100 to
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73556543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档