gpt4 book ai didi

C:从文件中读取未知数量的未知长度的行

转载 作者:行者123 更新时间:2023-11-30 20:38:09 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序读取未知数量的未知长度的行(使用malloc)并将它们保存到结构中。

当我尝试打印结构中保存的内容时,出现段错误。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct line{
struct line* next_line;
char* data;
}line;

line* read_line(line* ptrLine, FILE* pFile);

int main(int argc, char *argv[])
{
if(argc < 2){
return 2;
}

FILE* pFile;

if((pFile = fopen(argv[1], "r")) == NULL){
return 1;
}

line* list_beginning = NULL;
line* curr_line;

curr_line = read_line(list_beginning, pFile);

while(1){
if(fgetc(pFile) == EOF) break;
fseek(pFile, -1, SEEK_CUR);
curr_line = read_line(curr_line, pFile);
}

//printf("%c", (list_beginning->data[0]));
/*while(curr_line->next_line != NULL){
unsigned int i = 0;
for(i = 0; i < strlen(curr_line->data); i++){
printf("%c", curr_line->data[i]);
}
}*/

fclose(pFile);
return 0;
}

line* read_line(line* ptrLine, FILE* pFile){

ptrLine = malloc(sizeof(line));

ptrLine->data = malloc(1024*sizeof(char));
int curr_position = 0;
char c;

while(1){
c = fgetc(pFile);
if(c == '\n' || c == EOF) {
*(ptrLine->data + curr_position) = '\0';
break;
}
*(ptrLine->data + curr_position) = c;
curr_position++;
}

ptrLine->next_line = NULL;
return ptrLine->next_line;
}

最佳答案

line* read_line(line* ptrLine, FILE* pFile){

ptrLine = malloc(sizeof(line));

ptrLine->data = malloc(1024*sizeof(char));
int curr_position = 0;
char c;

while(1){
c = fgetc(pFile);
if(c == '\n' || c == EOF) {
*(ptrLine->data + curr_position) = '\0';
break;
}
*(ptrLine->data + curr_position) = c;
curr_position++;
}

ptrLine->next_line = NULL;
return ptrLine->next_line;

}

在此代码中,最后两行不好:

  ptrLine->next_line = NULL
return ptrLine->next_line;

您将 next_line 设置为 NULL 并返回它,以便您的“read_line”函数返回“NULL”为了避免这种情况,请将最后一行更改为:

   return ptrLine;

关于C:从文件中读取未知数量的未知长度的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30344902/

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