簡體   English   中英

使用fscanf()讀取一行

[英]Reading a line using fscanf()

我正在嘗試使用fscanf()從文件中讀取一行:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    char c, *string[4];
    int i = 0,j[4];
    fp = fopen("boil.txt", "r");
    c = fgetc(fp);
    if(fp == NULL)
    { printf("File read error\n");
        exit(0);
    }

    while(c != '\n')
    {
        fscanf(fp, "%s %d ", string[i] , &j[i]);
        i++;
        c = fgetc(fp);
    }
    for(i = 0; i < 4; i++)
    {
        printf("%s      %d\n", string[i], j[i]);
    }
}

boil.txt如下:

boil 4 boilmilk 3 boilwater 5 heat 10

為什么該程序出現細分錯誤?

因為您沒有為此類字符串保留空間:

char *string[4];

是指向字符串的指針數組,但是您需要空間來存儲這些字符串,例如:

char temp[256];

fscanf(fp, "%s %d ", temp , &j[i]);
string[i] = strdup(temp);

編輯:

正如iRove所指出的那樣, strdup不是標准的一部分(但在許多實現中可用),如果您不能使用strdup ,則可以選擇以下方法:

string[i] = malloc(strlen(temp) + 1);
if (string[i] == NULL) {
    perror("malloc");
    exit(EXIT_FAILURE);
}
strcpy(string[i], temp);

不要忘了在結束時免費通話(當不再需要字符串時)

for (i = 0; i < 4; i++) free(string[i]);

暫無
暫無

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

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