c语言过滤二进制字符串,C语言中char型字符串写成二进制文件的困惑(C的Bug?)

最近,做实验时需要把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,还是我编写代码的问题。希望有高手来指教一下,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值