最近,做实验时需要把char型字符串写成二进制文件。但是令我困惑的是,按照C语言进行二进制文件读写的标准程序调试时总是失败,每次文件中写的都是ASC码。下面是我的程序,请大家一起帮着分析一下:
#include
#include
#include
int main()
{
int length;
char str[] = {
0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68
};
FILE *fp;
if((fp=fopen("data.dat","wb"))==NULL)
{
printf("Cannot open file
strike any key exit!");
exit(1);
}
length=sizeof(str);
fwrite( str, 1, sizeof(str),
fp );
fclose(fp);
printf("length: %d %d
%d\n",length,sizeof(int),sizeof(char));
return 0;
}
之后,我无意中发现,如果在str初始化时把字符串的长度设为11,即char
str[11],这样就能够把这些字符写成二进制文件。由于最后三个字符没有赋值,文件中多打出了三个“.”对应的二进制数。接着,我又做了几次试验,发现只要初始化时字符串的长度比实际赋值的字符多3个或3个以上,那么就可以把字符串写成二进制文件。如果少于3个字符,则只把字符写入了文件。
由于我才疏学浅,不知道上述问题是C语言的bug,还是我编写代码的问题。希望有高手来指教一下,谢谢!