簡體   English   中英

在C中存儲文件串

[英]Storing String on File in C

我創建了一個小程序來將一些記錄輸入到文件中。

#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;
}

現在,它做得很好,沒有錯誤。 但我也制作了一個小程序來讀取該記錄:

#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;
}

但是當打印第三個字符串時,它會打印垃圾值。 我深入挖掘並發現當我在我的第一個程序中將"Cipher"替換為"Cipher " (最后有一個額外的空格)並運行它時,第二個程序中的第三個字符串僅輸出Virtual (並且沒有空格后)那么第四個字符串又是垃圾了。

那么,還有其他好的替代方法來放置和從C中的文件中獲取字符串。或者我在我的任何一個程序中做錯了什么?

期待你的幫助!

提前致謝。

問題是%s格式告訴fscanf讀取所有非空白字符,所以

fscanf(fp, "%d , %s , %s , %s",&id, &name, &add, &phone);

會將"Cipher,"讀成name (除了:正確的參數會有name而不是&name ),然后下一次轉換失敗,因為fscanf找不到','

使用"Cipher "之后的空格,掃描在找到空間后停止,然后下一次掃描停在"Virtual""Street"之間的空間,然后再次按照格式的要求進行掃描','並進一步轉換失敗。

您應該檢查fscanf的返回值以驗證是否已完成相應的轉換次數,並在成功的情況下處理相應的情況。

在這里,您可以使用%[^,]字符集格式來掃描字符串,

fscanf(fp, " %d , %[^,] , %[^,] , %s", &id, name, add, phone);

檢查fscanf的返回值,它返回成功轉換的次數。 此外,您告訴fscanf函數在空格上分隔標記(格式字符串中的空格),因此包含空格的字符串(如"Virtual Street" )被視為兩個標記。

我建議你使用fgets讀取整行,然后使用strtok分隔逗號上的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM