【发布时间】:2014-05-18 00:10:34
【问题描述】:
我最近开始学习 C。现在我想尝试对文件中的一些字符串进行排序。当我尝试运行它时,我得到“分段错误”。 这是我的代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare (const void * a, const void * b ) {
return strcmp(*(char **)a, *(char **)b);
}
int main() {
static const char filename[] = "t1.txt";
char line1[1023];
char line2[1023];
FILE *file = fopen ( filename, "r" );
char filetext[1023][1023];
int i=0;
if ( file != NULL )
{
while ( fgets ( filetext[i], sizeof filetext, file ) != NULL )
{
fputs ( filetext[i], stdout );
i++;
}
fclose ( file );
}
else
{
perror ( filename );
}
int n;
printf("Before sorting the list is: \n");
for( n = 0 ; n < i; n++ ) {
printf("%s", filetext[n]);
}
qsort(filetext, i, sizeof(filetext[0]), (int (*)(const void*,const void*))strcmp);
printf("\nAfter sorting the list is: \n");
for( n = 0 ; n < i; n++ ) {
printf("%s", filetext[n]);
}
return 0;
}
例如我想转: 文件:t1 Priority9 猫 优先级 2 ls Priority7 cat mysort.h
进入
优先级2 ls Priority7 猫 mysort.h 优先9猫
通过调用“cat t1 j mysort”或“mysort
【问题讨论】:
-
qsort(filetext, i, sizeof(char), compare);-->qsort(filetext, i, sizeof(filetext[0]), (int (*)(void*,void*)strcmp);and#include <stdlib.h>,while ( fgets ( filetext[i], sizeof filetext, file ) != NULL ):sizeof(filetext[0]) -
我有输入:
(int (*)(void*,void*)-->(int (*)(const void*, const void*)) -
@BLUEPIXY 改成这样:qsort(filetext, i, sizeof(filetext[0]), (int ( * )(const void * ,const void*))strcmp);并包含
。现在错误消失了,但它没有对其进行排序。我将“const”添加到“void”,因为没有它会出现很长的错误。 -
你应用蓝冰的答案吗?
-
请删除所有你不知道确切在做什么的演员表,并解释为什么演员表必须正确工作。永远不要扼杀编译器,而是要求它说出来:使用
-Wall -Wextra,并适当地处理所有警告。