c - 无法将文件中的字符串读取到数组中以最终进行排序

标签 c arrays file quicksort

我有一个正在完成的项目,我必须从文本文件中读取字符串并对它们进行快速排序。我觉得我的快速排序功能已经关闭,但似乎我的代码存在问题,无法读取字符串并将它们存储在 while 循环中的数组中。我放置了一个简单的打印语句来查看它是否正在读取它们,并且它似乎正在这样做,因为它打印出了所有字符串。但是,输出字符串后,它会因段错误而退出,并且不会继续对字符串进行排序。我正在寻找一些关于我可能遗漏或做得不正确的建议。我只是将代码发布到我正在读取文件以将字符串存储在数组中的位置,因为这就是错误开始的地方。

文件中共有 64 个字符串,但我将发布一些而不是全部。

Strings from text file

lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
etiam
et
magna
ut
sem
gravida
efficitur
pellentesque
magna
elit
posuere
sit
amet

实际代码

#include <stdio.h>
#include <string.h>
#define WORDSNUM 128

void print_list(char * array2[], int size2);
void swapping_words(char * my_array[], int a, int b);
void quicksort_list(char * word[], int begin, int end);
int partition(char * array5[], int e, int f);

int main() {

    FILE * fp;  
    fp = fopen("Project08Data.txt", "r");

    char * text_words[WORDSNUM];

    if (fp == NULL) {
        printf("Error, no file provided or not read properly.\n");
    }

    while(fgets(text_words, WORDSNUM, fp) != NULL) {
    printf("%s\n", text_words); //print statement I was using to see if the strings were being read in at least
    }

    fclose(fp);
    //These are the functions for my quick sort and printing the list after
    quicksort_list(text_words, 0, WORDSNUM - 1);
    print_list(text_words, WORDSNUM);
}

最佳答案

您正在使用 char * text_words[WORDSNUM]; 创建一个指向字符的指针数组,但您没有为这些指针分配任何内存。实际上,我们甚至不知道它们指向哪里,因为它们没有初始化。因此,您正在写入未分配和未指定的内存区域,从而导致段错误。

您可以使用 malloc 在内存中分配要写入单词的空间。

关于c - 无法将文件中的字符串读取到数组中以最终进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316013/

相关文章:

索引空变量时未引发 php 未定义索引通知

Git 显示最近 2 天更改的文件

ruby - 通过 Ruby 搜索和替换文件中的多个单词

java - 尝试将数据写入 .txt 文件。我究竟做错了什么?

c - vsnprintf 和 NULL 输入字符串参数

arrays - [ swift 2.2] : analog arc4random for range with negative numbers

javascript - 通过动态更改的变量键访问对象键

c - 在 C 中使用 execve 加载程序时子进程如何终止

c - Net raid FS with FUSE, gcc -hello.c -o a.out, a.out 不可执行

c - 两个CPU之间棘手的队列使用