【发布时间】:2015-05-07 11:23:15
【问题描述】:
我正在编写一个按字母顺序对文件中的行进行排序的程序。
我想通过将排序添加到动态分配的单向列表来做到这一点。
为了测试,我制作了一个程序,它从文件中读取fgets 到char bufor[] 的行,然后我想将其添加到单向列表的开头,但是当我想检查*head!=NULL 时,然后我收到一个错误。问题出在哪里?
代码如下: 我已经做了结构
typedef struct LISTA lista;
struct LISTA
{ char*line;
lista* next;};
void check(int argc,char * argv[]) {
if (argc < 2)
{
fprintf (stderr, "Uzycie: %s nazwa_pliku\n", argv[0]);
exit (-1);
} }
FILE* otworz_plikR(char* namef) // Otwieranie pliku w Trybie READ
{
FILE* fp;
fp = fopen(namef, "r");
if (fp == NULL) {
fprintf(stderr, "Cannot open source file!\n");
exit(1);
}
else printf("Source file opened!\n");
return fp;
}
lista* stworz_liste(char* namef)
{
lista **head=NULL;
char bufor[100];
char *line;
lista *tmp;
*head=NULL;
size_t* len = 0;
FILE* fp=otworz_plikR(namef);
while(fgets(bufor,&len,fp)!=NULL)
{
line = (char*)malloc(sizeof(char)* (strlen(&bufor) + 1));
strcpy(line, bufor);
printf("%s",line);
tmp = (lista*)malloc(sizeof(lista));
tmp->next=NULL;
tmp->line=line;
if (*head != NULL) tmp->next = *head;
*head = tmp;
}
fclose(fp);
free (bufor);
free (len);
fclose(fp);
}
这是主要的:
int main( int argc, char * argv[] )
{
check(argc,argv);
lista *head=stworz_liste(argv[5]);
printf("\n%s",head->line);
free (head);
return 0;
}
感谢您的帮助。 argv[3] = 输出.txt argv[5] = input.txt。 也许您还有其他问题可以解决这个问题?
【问题讨论】:
-
lista **head=NULL。这使得headNULL。所以你不能取消引用它。也就是说,*head正在尝试取消引用空指针。 -
0)
stworz_liste不返回值。 1)fgets(bufor,&len,fp)-->fgets(bufor, sizeof bufor, fp) -
2)
free (bufor); free (len);这个删除。