如何使用read()和/或fgetc来获取某些字符串

时间:2013-11-29 00:10:53

标签: c fgetc

使用fgetc()和/或read()如何从文件中获取密钥和值? 这是它写在文件中的方式:

 <key1,val1><key2,val2><key3,val3>

我需要将每个键和值放在一个新数组中(做链接列表)。

因此,要使用'<''>'以及','插入文件,这没问题。问题是如何获得它们? 有什么想法吗?

这就是我所拥有的。

FILE * file;
char* key;
char* value;
int c;//apparently I have to use an int
file=fopen("myfile.txt", "r");
c=fgetc(file);
while(c != EOF)
{
   c=fgetc(file);
   if(c == '<'){
      for(int i=0; c != ','; i++)
      {
         key[i]=fgetc(file);
      }
   }
}

直到第一个逗号。现在我缺乏一点算法概念。请帮助。

1 个答案:

答案 0 :(得分:2)

是否必须是fgetc并阅读? ..这是一种方法:

     while(!feof(your_file_name)){
        bzero(line, sizeof(line)); // line is a char array ... make sure its of sufficiently large size
        fgets(line,100,your_file_name); // I am reading 100 characters  .. you can change that number as per your file accordingly
     }

    fclose(your_file_name);

    sscanf(line,"<%d,%d><%d,%d><%d,%d>",&key1,&val1,&key2,&val2,&key3,&val3); //  assuming keys and vals are ints

你在代码中所做的是逐个字符地阅读文件。为什么要经历所有的痛苦?

使用fgets将一次性读取整个文件...然后知道文件格式sscanf是从中恢复信息的极其强大的工具


好的,所以你在评论中发表了键和val是字符串..所以将sscanf更改为:

sscanf(line,"<%[^,]%[^>]<%[^,]%[^>]<%[^,]%[^>]",key1,val1,key2,val2,key3,val3);

好的,让我解释一下

在处理sscanf中的字符串时,您必须指定分隔符。

所以这个<%[^,]告诉sscanf - 从这个<字符开始读取一个字符串并读取它直到你到达,字符......