2
我想在C中寫一個函數,它從文件中讀取一些用逗號分隔的值,每行有4個值,最後一個是整數,我想把它們放入一個分配的空間。當我試圖從while循環中的內存中讀取它們時,它們都很好,但是從for循環或從函數外部,我只是在文件的最後一行多次讀取文件的最後一行,因此在某些情況下會錯過某些字符。我是C新手,但我認爲它與strtok()
功能有關。c中的結構數組
這裏是我的代碼:
#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;
}
如果數據結束後文件中有東西,最後也可能會重複最後一行。事實上,你至少會得到一個重複,因爲在最後的 \ n它會返回一行,你會再次調用它,它會返回一個零長度的行(這看起來很像你以前的行)在buf中行),只有當你再次調用它時,它纔會有EOF。 – 2013-03-03 21:51:17
@NeilTownsend很好的觀察,從來沒有想到這一點。 – cnicutar 2013-03-03 21:53:56
謝謝你:-)但你的答案涉及到根本問題,我認爲這是一個非常有洞察力的問題。 – 2013-03-03 21:59:20