我正在尝试将文件中的每个字节读入缓冲区并输出:
FILE* f_stream = fopen("C:\\Users\\Neo\\source\\repos\\mt_2_lab_3\\Debug\\myfile.txt", "rb");
size_t bytes_read = 0;
char* buf[1];
if (f_stream == NULL)
printf("\nFile stream open failed!\n");
else
{
printf("\nFile stream successfully opened!\n");
while ((bytes_read = fread(buf, 1, sizeof(buf), f_stream)) > 0)
{
cout << buf << endl;
}
}
文件 myfile.txt 包含以下文本: abs
程序输出:
File stream successfully opened!
002AF5D8
虽然我期望它是:
a
b
s
如果你这样做:
cout << (char)buf << endl;
然后每次显示1个随机字符
如果你这样做:
cout << buf[0] << endl;
然后出现错误“在 mt_2_lab_3.exe 中的 0x1001FF5C (ucrtbased.dll) 处引发异常:0xC0000005:在地址 0xCC736261 读取时访问冲突”
我究竟做错了什么?将来,我想读取的不是 1 个字节,而是例如 256 字节并处理这 256 个字节。
您可以通过这种方式读取每个字节:
数组声明
每个字母存储一个指针,并且您需要一个字母数组:
根据需要打印缓冲区
将导致程序崩溃,因为线程
std :: stream
认为这是一个指向字符串而不是数组的指针,并在那里寻找字符串字节的结尾。将字节打印为字母是一个坏主意,因为文件中有不可打印的字符,这些是控制字符(颜色、屏幕归零、移动光标等)
只有一个检查字符是否可打印的循环。