在C中存储文件串

cip*_*her 4 c file-handling

我创建了一个小程序来将一些记录输入到文件中.

#include<stdio.h>

int main(void)
{
    FILE *fp;
    //opening a file to write
    fp = fopen("try.rec","w");
    if(fp == NULL)
    {
        printf("\nSorry! Couldn't Create File");
        exit(-1);
    }
    int id = 1;
    char name[300] = "Cipher", address[300] = "Virtual Street", phone[20] = "223322212";
    fprintf(fp,"%d, %s, %s, %s", id, name, address, phone);
    fclose(fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,它做得很好,没有错误.但我也制作了一个小程序来读取该记录:

#include<stdio.h>

int main(void)
{
    FILE *fp;
    fp = fopen("try.rec","r");
    if (fp == NULL)
    {
        printf("Could not Access File. :(");
        return -1;
    }
    int id;
    char name[300], add[300], phone[20];
    fscanf(fp, "%d , %s , %s , %s",&id, &name, &add, &phone);
    fclose(fp);
    printf("\nDetails from File try.rec\n---------------------------\nID: %d \nName: %s \nAddress: %s \nPhone: %s \n", id, name, add, phone);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当打印第三个字符串时,它会打印垃圾值.我进一步挖掘,发现,当我更换"Cipher""Cipher "在我的第一个程序(其最后一个额外的空间),并运行它,然后在第二个方案的产出第三串唯一的Virtual(与空间之后没有),然后第四串又是垃圾.

那么,还有其他好的替代方法来放置和从C中的文件中获取字符串.或者我在我的任何一个程序中做错了什么?

期待你的帮助!

提前致谢.

Dan*_*her 6

问题是%s格式告诉fscanf读取所有非空白字符,所以

fscanf(fp, "%d , %s , %s , %s",&id, &name, &add, &phone);
Run Code Online (Sandbox Code Playgroud)

将读"Cipher,"name(除了:正确的参数,name而不是&name),然后下一次转换失败,因为fscanf找不到','.

随着之后的空间"Cipher ",扫描停止后的空间被找到,然后下一次扫描时之间的空间将停止"Virtual""Street",然后再没有','所要求的格式,并进一步转换失败.

您应该检查返回值fscanf以验证是否已完成适当的转换次数,并且如果成功的次数太少,则相应地处理相应的情况.

在这里,您可以使用tha %[^,]字符集格式来扫描字符串,

fscanf(fp, " %d , %[^,] , %[^,] , %s", &id, name, add, phone);
Run Code Online (Sandbox Code Playgroud)