0

我有一个看起来像这样的存档文件:

!<arch>
file1.txt/      1350248044  45503 13036 100660  28        `
hello
this is sample file 1

现在在这里,标题中的数字 28 是file1.txt大小。要获得该号码,我使用:

  int curr_char;
  char file_size[10];
  int int_file_size;

  curr_char = fgetc(arch_file);

  while(curr_char != ' '){
    strcat(file_size, &curr_char);
    curr_char = fgetc(arch_file);
  }

 // Convert the characters to the corresponding integer value using atoi()
 int_file_size = atoi(file_size);

但是,file_size每次运行代码时,数组中的值都会发生变化。有时它是正确的,但大多不是。以下是我得到的一些示例file_size

?28`U

2U8U

28 <--- 正确!

派?28

我相信问题出在我的 strcat() 函数上,但不确定。任何帮助,将不胜感激。

4

3 回答 3

1

&curr_char是 a int*,因此您正在复制 a 的位,int就好像它们表示一个字符串一样。

你应该使用scanf.

于 2012-10-22T22:43:17.120 回答
1

您不应该明智地阅读文件字符。有更高级别的功能可以做到这一点。正如 larsmans 已经指出的那样,您可以fscanf()用于此任务:

fscanf(arch_file, "%d", &int_file_size);
于 2012-10-22T22:50:56.100 回答
1

该表达式&curr_char指向单个字符(嗯,实际上是一个整数,因为这就是您声明它的方式)。strcat寻找一个字符串,你应该知道的字符串以一个'\0'字符结尾。因此strcat,在您的情况下,将&curr_char指针用作字符串的地址并查找终止符。由于没有发现奇怪的事情会发生。

解决这个问题的一种方法是创建curr_char一个数组,初始化为零(字符串终止符)并读入第一个条目:

char curr_char[2] = { '\0' };  /* Will make all character in array be zero */

...

curr_char[0] = fgetc(...);

还有另一个问题,那就是您试图连接成一个未初始化的字符串。运行程序时,数组file_size可以包含任何数据,它不会自动归零。这会导致数字出现奇怪的字符。通过初始化数组,这部分解决了与上述问题相同的方式:

char file_size[10] = { '\0' };
于 2012-10-22T22:51:21.467 回答