在C中正确使用strcat()

时间:2012-10-22 22:41:24

标签: c

我有一个如下所示的存档文件:

!<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&lt; ---正确!

PAI?28

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

3 个答案:

答案 0 :(得分:1)

&curr_charint*,因此您要复制int的位,就像它们代表一个字符串一样。

您应该使用scanf

答案 1 :(得分:1)

您不应该明智地阅读文件字符。这样做有更高级别的功能。正如larsmans已经指出的那样,你可以使用fscanf()来完成这项任务:

fscanf(arch_file, "%d", &int_file_size);

答案 2 :(得分: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' };