2012-04-19 124 views
2

我有一个数组正在写入文件,但是当我调用该函数时,我需要一种方法来从文件中打印出相同的信息。代码的第一部分位于主函数中,第二部分是第二个函数,用于打印文件中应该有的值(fp)。从文件中的数组写入和打印字符串C

fp = fopen("Grue.txt", "wb"); 
for(i = 0; i < 5; i++) 
{ 
    char newLine[3] = {"\n"}; 
    char space[2] = {" "}; 
    fwrite(array[i].name, strlen(array[i].name), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].height, strlen(array[i].height), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].weight, strlen(array[i].weight), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].items, strlen(array[i].items), sizeof(char), fp); 
    fwrite(newLine, strlen(newLine), sizeof(char), fp); 
} 
fclose(fp); 
fp = fopen("Grue.txt", "rb"); 
PrintAGrue(fp); 


void PrintAGrue(FILE *a) 
{ 
// create End of file character onto the array being saved, 
int i; 
char n; 
char h; 
char w; 
char m; 

for (i=0; i<5; i++) 
{ 
    n = fread(a[i].name, strlen(array[i].name, sizeof(char), a); 
    h = fread(array[i].height, strlen(array[i].height, sizeof(char), a); 
    w = fread(array[i].weight, strlen(array[i].weight, sizeof(char), a); 
    m = fread(array[i].items, strlen(array[i].items, sizeof(char), a); 

    printf("This grue is called %s and is %s feet tall, and weighs %s pounds, and has eaten %s things.", n, h, w, m); 
} 

}

+1

那么当你尝试这个时,它会做什么? – 2012-04-19 21:47:03

回答

1

PrintAGrue,它看起来像你使用strlen()调用多少来决定要读取的数据 - 但如何 你能前知道该字符串的大小,你所阅读? (另外,括号不看平衡...)

也许你的文件格式应明确包括为每个字符串长度字段 - 那么你 可以做一个fread找到字符串大小,另一条实际读取字符串。

相关问题