2

我正在用 C 编写一个程序,我正在读取一个文本文件fread,但我无法正确读取整数。

文本文件中的值为a16,我得到的输出是:

 a= 538976288

我使用了成功读取二进制文件的类似代码。我想了解在 c 中读取 ASCII 表的最佳方法是什么。

表格大小由文件顶部的整数给出。数据以空格分隔。

这是我写的简单代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  int a, flag_fread;
  FILE * p_finput = NULL;
  char * filename = NULL;

  filename = malloc(sizeof(char) * (strlen(argv[1]) + 1));
  strncpy(filename, argv[1],strlen(argv[1]));
  filename[strlen(argv[1])] = '\0';

  p_finput = fopen(filename, "r");
  if (p_finput == NULL)
    {
      printf("couldn't open %s \n", filename);
      abort();
    }


  flag_fread = fread(&(a), sizeof(int), 1, p_finput);

  printf("a= %d \n", a);  

  fclose(p_finput);
  free(filename);
  return 0;
}
4

2 回答 2

3

要读取以文本形式写入的值,您应该使用fscanf,如下所示:

fscanf(p_finput, "%d", &a);

于 2013-04-17T16:45:53.943 回答
3

fread以原始二进制形式读取文件中的数据。例如,当数据以这种方式存储时,它会起作用fwrite。处理文本时,您可以使用fscanf建议不要使用它,因为它不进行任何边界检查,这可能会导致缓冲区溢出。

更好的做法是使用fgets然后使用来读取文件sscanf以获取所需的值。例如:

char buffer[100];
int itemsScanned = 0;
if(fgets(buffer, 100, p_finput) != NULL){
    itemsScanned = sscanf(buffer, "%d", &a);
}
/* check itemsScanned & continue */
于 2013-04-17T16:58:57.290 回答