我有一个如下所示的存档文件:
!<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()函数上,但不确定。任何帮助将不胜感激。
答案 0 :(得分:1)
&curr_char
是int*
,因此您要复制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' };