项目中需要写入一行字符串,后续要读出这行字符串并计算长度,不同的代码段计算的长度有时候差1,开始搞不明白是什么原因,后来终于排查出来,是因为文件打开方式的原因:
1、如果是以文本方式打开文件,写入文件时遇到‘\n’,会自动写入 0x0D 0x0A 两个字节,后续如果以文本方式打开读,'\n'会当做一个字节;以二进制方式打开读,'\n'会当做两个字节,strlen()返回的长度不一样,如下代码所示:
fopen_s(&f1,"test.txt", "a");
fprintf(f1,"test\n");
fclose(f1);
fopen_s(&f1,"test.txt", "r+");
fgets(line, 260, f1);
length = strlen(line);
printf("r+ len:%d\n", length);
fclose(f1);
fopen_s(&f1,"test.txt", "rb+");
fgets(line, 260, f1);
length = strlen(line);
printf("rb+ len:%d\n", length);
fclose(f1);
文件如下:
运行结果如下:
2、如果是以二进制方式打开文件,写入文件时遇到‘\n’,会自动写入 0x0A 一个字节,不论以文本方式还是二进制方式打开读,'\n'都会当做一个字节,如下代码所示:
fopen_s(&f1, "test.txt", "ab");
fprintf(f1, "test\n");
fclose(f1);
fopen_s(&f1, "test.txt", "r+");
fgets(line, 260, f1);
length = strlen(line);
printf("r+ len:%d\n", length);
fclose(f1);
fopen_s(&f1, "test.txt", "rb+");
fgets(line, 260, f1);
length = strlen(line);
printf("rb+ len:%d\n", length);
fclose(f1
文件如下:
运行结果: