gpt4 book ai didi

c - 将 csv 文件读入结构数组

转载 作者:行者123 更新时间:2023-12-04 13:50:00 25 4
gpt4 key购买 nike

我开始用C写代码,我的代码如下:

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

#define MAX_STR_LEN 256
#define MAX_BOOKS 256

struct book{
int ID;
char *name;
char *dateIn;
char *dateOut;
};

struct book books[MAX_BOOKS];

/* PROTOTYPE OF FUNCTIONS */
int readBookFile();
void printBookList();


int main(int argc, char **argv)
{
int isOK = 0;

isOK = readBookFile();

printBookList();

system("pause");
return 0;
}

int readBookFile()
{
/* FileStream for the Library File */
FILE *bookFile;

/* allocation of the buffer for every line in the File */
char *buf = malloc(MAX_STR_LEN);
char *tmp;

/* if the space could not be allocaed, return an error */
if (buf == NULL) {
printf ("No memory\n");
return 1;
}

if ( ( bookFile = fopen( "library.dat", "r" ) ) == NULL ) //Reading a file
{
printf( "File could not be opened.\n" );
}

int i = 0;
while (fgets(buf, 255, bookFile) != NULL)
{
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '\n'))
buf[strlen (buf) - 1] = '\0';

tmp = strtok(buf, ";");
books[i].ID = atoi(tmp);

tmp = strtok(NULL, ";");
books[i].name = tmp;

tmp = strtok(NULL, ";");
books[i].dateIn = tmp;

tmp = strtok(NULL, ";");
books[i].dateOut = tmp;

//tempBook.ID = atoi(buf);
printf("index i= %i ID: %i, %s, %s, %s \n",i, books[i].ID , books[i].name, books[i].dateIn , books[i].dateOut);

i++;
}
//free(buf);
fclose(bookFile);
return 0;
}

void printBookList()
{

int i;
//i = sizeof(books) / sizeof(books[0]);
//printf ("%i \n", i);


for (i = 0; i <= sizeof(books); i++)
{
if (books[i].ID != 0)
printf("index i= %i ID: %i, %s, %s, %s \n",i, books[i].ID , books[i].name, books[i].dateIn , books[i].dateOut);
else
break;
}

}

问题是,在 readBookFile() 结束后,我的结构数组充满了输入文件的最后一个值。

我的输入文件是:

1;das erste Buch; 12122013; 13122013
2;das Zweite Buch; 12122013; 13122013
3;das dritte Buch; 12122013; 13122013
4;das vierte Buch; 12122013; 13122013
5;das fünfte Buch; 12122013; 13122013
6;das sechste Buch; 12122013; 13122013

所以在 readBookFile 函数中,printf 返回正确的值,但在 printBooksList() 函数中,所有值似乎都已更改为我的输入文件的最后一行。

the output on my console

任何人都可以向我解释一下并指出正确的方向吗?

非常感谢哈巴特

最佳答案

问题是你的结构:

struct book{
int ID;
char *name;
char *dateIn;
char *dateOut;
};

name, dateIn, dateOut 是“指针”,它们只是指向某物,你没有为它们分配空间。
您所做的只是将它们指向 tmp(buf)

所以您在 printBookList() 中所做的只是打印相同的字符串 block ,而 ID 没问题,因为它不是指针。

要解决这个问题,为它们分配空间,你可以使用strdup(),但一定要释放它们。

关于c - 将 csv 文件读入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212714/

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