使用C语言,将一个带0x00的字符串写入txt文件中,然后读出并打印。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main()
{
char table[20]={'t','e','s','t','m','s','g',0x00,'a','b',
'c','d','e','f','g','h','u','j','k','l'};
int i;
char *buf;
FILE* file;
/*write*/
file=fopen("E:\\c\\readTxt\\test.txt","wb");
if(file == NULL){
printf("open file fail\r\n");
return -1;
}
for(i=0;i < 20;i++){
fprintf(file,"%c",table[i]);
}
fclose(file);
/*read*/
file=fopen("E:\\c\\readTxt\\test.txt","rb");
if(file == NULL){
printf("open file fail\r\n");
return -1;
}
buf = (char*)malloc(50*sizeof(char));
for(i=0;i < 50;i++){
*(buf+i) = '\0';
}
fread(buf,50,1,file);
printf("read file data:\r\n");
for(i=0;i < 50;i++){
printf("%c",*(buf+i));
}
fclose(file);
getchar();
return 0;
}
需要注意的是,当数据包含0x00的时候,不能将其当成一个字符串,用strlen()计算长度,或是printf()打印的时候,使用%s。由于字符串在遇到0x00的时候会直接截断,把数据直接作为字符串处理,数据到0x00处就没有了。printf()输出的时候,就没有0x00后面的数据了。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main()
{
char table[20]={'t','e','s','t','m','s','g',0x00,'a','b',
'c','d','e','f','g','h','u','j','k','l'};
int i;
char *buf;
FILE* file;
/*write*/
file=fopen("E:\\c\\readTxt\\test.txt","wb");
if(file == NULL){
printf("open file fail\r\n");
return -1;
}
for(i=0;i < 20;i++){
fprintf(file,"%c",table[i]);
}
fclose(file);
/*read*/
file=fopen("E:\\c\\readTxt\\test.txt","rb");
if(file == NULL){
printf("open file fail\r\n");
return -1;
}
buf = (char*)malloc(50*sizeof(char));
for(i=0;i < 50;i++){
*(buf+i) = '\0';
}
fread(buf,50,1,file);
printf("read file data:\r\n");
// for(i=0;i < 50;i++){
// printf("%c",*(buf+i));
// }
printf("%s\r\n",buf);
fclose(file);
getchar();
return 0;
}
程序的输出会变成这样
0x00后面的字符就不会输出了,因为程序识别到0x00,就判断字符串结束了。