c - 无法将文件中的字符串读取到数组中,最终排序
问题描述
我有一个项目要完成,我必须从文本文件中读取字符串并对它们进行快速排序。我觉得我的快速排序功能已关闭,但我的代码似乎遇到了问题,无法通过读取字符串并将它们存储在我的 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
在内存中分配空间,您将在其中写入单词。
推荐阅读
- mongodb - MongoDB > 文本查询 > 相似词
- c - nginx 模块为日志模块设置变量值
- c# - 如何在角色声明中存储多个角色?
- node.js - 从节点脚本返回真/假值到 bash
- c - 是否可以为每个 pthread 安装单独的信号处理程序?
- javascript - 在 Angular 2+ 上重新渲染 FullCalendar
- c# - 创建 ViewModel 以组合链接的 2 个模型
- php - 在 Codeigniter 中多次上传的表单中未选择文件
- python-3.x - 如何编辑列表中的特定元素
- python - 需要为特定列设置列宽大小..同时为数据框创建表以将其转换为图像