首页 > 解决方案 > 无法将文件中的字符串读取到数组中,最终排序

问题描述

我有一个项目要完成,我必须从文本文件中读取字符串并对它们进行快速排序。我觉得我的快速排序功能已关闭,但我的代码似乎遇到了问题,无法通过读取字符串并将它们存储在我的 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);
}

标签: carraysfilequicksort

解决方案


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

您可以用来malloc在内存中分配空间,您将在其中写入单词。


推荐阅读