gpt4 book ai didi

c - 访问 *head 并从文件中读取

转载 作者:行者123 更新时间:2023-11-30 15:20:18 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序按字母顺序对文件中的行进行排序。我想通过向动态分配的单向列表添加排序来实现这一点。为了进行测试,我编写了一个程序,它通过 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] = 输出.txtargv[5] = 输入.txt。也许您还有其他问题可以解决这个问题?

最佳答案

我简化了您的列表生成器功能,但添加了更多错误检查。方法是创建每个新节点,将其链接到现有链表,并使其成为链表的新头。最后它返回列表指针。

lista *stworz_liste(char *namef) 
{
lista *head = NULL; // single indirection
char bufor[100];
lista *tmp;
FILE* fp=otworz_plikR(namef);
while(fgets(bufor, sizeof(bufor), fp) != NULL) // replaced len
{
bufor [ strcspn(bufor, "\r\n") ] = 0; // remove trailing newline
tmp = malloc(sizeof(lista)); // memory for list item
if (tmp == NULL)
exit(1); // error
tmp->line = malloc(strlen(bufor) + 1); // simplify, remove &
if (tmp->line == NULL)
exit(1); // error
strcpy(tmp->line, bufor);
printf("%s\n",tmp->line);
tmp->next = head; // link to current list
head = tmp; // new head of list
}
fclose(fp);
//free (bufor); // can't free this
//fclose(fp); // close once only
return head; // return head of list
}

关于c - 访问 *head 并从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30099685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com