gpt4 book ai didi

c - c中的结构数组

转载 作者:行者123 更新时间:2023-12-02 22:11:39 25 4
gpt4 key购买 nike

我正在尝试用 C 编写一个函数,它从文件中读取一些用逗号分隔的值,每行有 4 个值,最后一个是整数,我想将它们放在分配的空间中。当我试图在 while 循环中从内存中读取它们时,它们很好,但是从 for 循环或函数外部我多次只获取文件的最后一行,在少数情况下它们会丢失一些字符。我是 C 的新手,但我认为它与 strtok() 函数有关。

这是我的代码:

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

typedef struct {
char * foo;
char * bar;
char * baz;
int qux;
}structure;

char * readFile(const char * filename, structure * array){
const int maxstring=100;
FILE * fr=fopen(filename,"r");
char * rc;
char buf[maxstring];
while(( rc = fgets(buf, maxstring, fr) )) {
array->foo=strtok (buf,",");
array->bar=strtok (NULL,",");
char *aux=strtok (NULL,",");
array->qux=atol(strtok (buf,","));
array->baz=strtok(aux,"\n");
printf("%s,%s,%s,%d\n",array->foo,array->bar,
array->baz,array->qux);
array++;
}
array=array-9;
for (int i=0;i<10;i++){
printf("%s,%s,%s,%d\n",array->foo,array->bar,
array->baz,array->qux);
array++;
}
return "Success";
}


int main(){
structure * array=malloc(100*sizeof(structure));
readFile("repository.txt",array);
free(array);
return 0;
}

最佳答案

问题是您正在存储 strtok 返回的指针。函数strtok返回原始缓冲区内存中的指针,即buf内部的指针。并且您在每次迭代时覆盖 buf(通过 fgets)。

解决该问题的最简单方法是strdup strotk 返回的值:

char * p = strtok (buf,",");
if (p)
array->foo = strdup(p);

您存储的其他内容也是如此。完成后不要忘记调用 free

关于c - c中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191219/

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