我正在尝试在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;
}
Run Code Online (Sandbox Code Playgroud)
问题是你存储的返回指针strtok.该函数strtok返回原始缓冲区内存中的指针,即指针内部buf.并且你buf在每次迭代时都会覆盖(通过fgets).
解决问题的最简单方法是strdup返回的值strotk:
char * p = strtok (buf,",");
if (p)
array->foo = strdup(p);
Run Code Online (Sandbox Code Playgroud)
您存储的其他内容也是如此.free当你完成它们时别忘了打电话.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |