从C中的文件中的数组中编写和打印字符串

时间:2012-04-19 21:43:58

标签: c arrays text text-files

我有一个数组被写入文件,但是当我调用该函数时,我需要一种方法从文件中输出相同的信息。代码的第一部分在main函数中,第二部分是第二个函数,它打印出应该来自文件的值(fp)。

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 个答案:

答案 0 :(得分:1)

PrintAGrue中,看起来您正在使用strlen()调用来决定要读取多少数据 - 但是如何 你能在之前知道字符串的大小吗? (另外,括号看起来不平衡......)

也许你的文件格式应明确包含每个字符串的长度字段 - 然后你 可以做一个fread来查找字符串大小,另一个来实际读取字符串。