一个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]);
}
}
}
这是我们想要的预期输出结果:
![expected output](https://istack.dev59.com/R5ehS.webp)
![incorrect/actual output](https://istack.dev59.com/VCCwq.webp)
sleep();
命令时,出现了以下情况(为了清晰起见,第二行用绿色突出显示):
![enter image description here](https://istack.dev59.com/sWvfd.gif)
\r
和\n
转义代码。当写入控制台时,CR将光标移动到第一列,LF将光标向下移动一行,但保留原列。你的动画演示了由于CR字符而将光标移动到第一列。我建议在你的代码中将\n
和\r
都替换为“.”。然后输出将在原始文本行的末尾显示两个点。 - Ian Abbott'\t'
。也许更好的主意是使用printf("%c", buffer[i] >= ' ' && buffer[i] < 127 ? buffer[i] : '.');
。顺便说一下,您混淆了i
和a
作为循环索引。(已经被 Gerhardh 抱怨过了。) - Scheff's Cat