是否存在与fscanf等效的c-runtime函数,它包含相同的参数列表?

时间:2013-07-03 15:07:21

标签: linux scanf libc archlinux

嗨我有这样的功能

while(fscanf(fp,"\n%d\t%s\t%s\t%X%X\t%d\t  \n",&record.Index,record.Name,record.Empcode,&record.CSN_MSB,&record.AccessRights)!=EOF)
 {
  printf("\nIndex: %d\nEmployee Name: %s\nEmpcode: %s\nCSN: %X\nAccessRights: %d\n",record.Index,record.Name,record.Empcode,record.CSN_MSB,record.AccessRights);
  sprintf(CSN_MSB_LSB,"%X", record.CSN_MSB);
  if(strncmp(CSN_MSB_LSB,str,8)==0)
  found=1;       
 }

在这段代码中,我的fscanf只读取文件指针fd中的一行,我想读取文件中的所有行。 我怎么能这样做 使用相同的fscanf函数或者任何包含fscanf函数相同参数列表的替代方案请建议我

1 个答案:

答案 0 :(得分:0)

我会尝试这样的东西:

    while(fscanf(fp,"%d%s%s%X%X%[^\n]*c",
          &record.Index,record.Name,record.Empcode,
          &record.CSN_MSB,&record.AccessRights)!=EOF)
    {

但是,值得注意的是,您正在扫描6个项目并且仅存储5个。此外,您正在使用sscanf,它接受指向字符的指针并向其传递文件指针(文件描述符),您想要使用fscanf if从文件中读取。您扫描的最后一个号码永远不会被存储。 “[^ \ n]”表示扫描直到换行并取代您正在扫描的最后一个数字(虽然您没有在示例中保存它)并且“* c”消耗该换行符。请参阅this