【发布时间】:2018-04-24 10:09:48
【问题描述】:
以二进制模式读取 txt 文件并存储在缓冲区中(我正在编写 HEX 编辑器,因此以二进制模式读取文件很重要):
以下代码删除所有新行并将 txt 打印到控制台:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
FILE *fileptr;
unsigned char *buffer;
long filelen;
int main(int argc, char* argv[]){
fileptr = fopen(argv[1], "rb");
fseek(fileptr, 0, SEEK_END);
filelen = ftell(fileptr);
rewind(fileptr);
buffer = (char *)malloc((filelen+1)*sizeof(char));
fread(buffer, filelen, 1, fileptr);
fclose(fileptr); // Close the file
for (int i = 0; i < filelen; i++){
if (buffer[i] == '\n'){
printf(".");
}else{
printf("%c", buffer[i]);
}
}
}
当添加sleep(); 命令时,这似乎正在发生(为清楚起见,第二行以绿色突出显示):
第一行打印正常,然后到达新行,这是发生错误的地方,新行似乎被删除了,只有光标跳回到行首,这种行为不是预期的,也不是想要的。
【问题讨论】:
-
如何打开文件?文本模式还是二进制模式?
-
请贴出真实完整的代码。从内存中键入一些随机文本很容易出错,而复制和粘贴则不然。您在循环中弄乱了索引变量。请发帖MCVE
-
Linux 和 Windows 有不同的方式来终止文本文件中的行。使用 Mingw 时,这会变得令人困惑,因为您必须决定遵循哪个标准。您运行的是 Linux 还是 Windows,文本文件属于哪个系统?
-
@BoPersson 看目录名肯定是Windows。
-
Windows 上的规范文本文件格式的每一行都以两个 ASCII 字符结尾:CR 后跟 LF。在 Windows 上的 C 中,这些字符代码应分别映射到
\r和\n转义代码。写入控制台时,CR 将光标移动到第一列,LF 将光标在同一列中向下移动一行。由于 CR 字符,您的动画显示光标移动到第一列。我建议在您的代码中用.替换\n和\r。然后输出将在每个原始文本行的末尾显示两个点。
标签: c windows printf mingw newline