【发布时间】:2021-02-09 07:31:15
【问题描述】:
我有一个包含单词列表的文本文件,每行一个,我应该将它们存储在一个数组中,然后按字母顺序对它们进行排序。我被困住了,我需要一些指导。我得到的唯一错误是730 segment fault
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *data[45];
int i;
int j;
// OPENS THE FILE
FILE *fp = fopen("/classes/cs3304/cs330432/Programs/StringerTest/TestInput.txt", "r");
if (fp == NULL) {
printf("Unable to open the file\n");
} else {
while (fscanf(fp, "%s", data) == 1)
printf("%s\n", data);
fclose(fp);
}
char temp[100];
for (i = 0; i < 45 - 1; i++) {
for (j = j + 1; j < 45; j++) {
if (strcmp(data[i], data[j]) > 0) {
strcpy(temp, data[i]);
strcpy(data[i], data[j]);
strcpy(data[j], temp);
}
}
}
for (i = 0; i < 45; i++) {
printf("%s", data[i]);
}
return (0);
}
【问题讨论】:
-
当您在您的
fscanf调用中使用data作为目标时,这与&data[0]相同,这是一个char **,并且绝对是错误的类型,并且不会指向您期望的位置。 -
char *data[45];...fscanf(fp, "%s", data)没有任何意义。 -
当你解决了这个问题时,请记住
scanf系列函数不能为字符串分配内存,这是你的责任。如果您不这样做,那么data是一个 未初始化 指针数组。 -
哦,您需要考虑一下如果输入文件中的字数少于(或多于!)45 个字会发生什么。
-
最后,当
j未初始化时,j=j+1也没有任何意义。也许你的意思是j = i + 1?
标签: arrays c bubble-sort