【发布时间】:2014-07-12 18:53:22
【问题描述】:
我正在尝试读取二进制文件并将其存储在缓冲区中。问题是,在二进制文件中有多个以空字符结尾的字符,但它们不在末尾,而是在其他二进制文本之前,所以如果我将文本存储在 '\0' 之后,它只会将其删除缓冲区。
例子:
char * a = "this is a\0 test";
cout << a;
这只会输出:this is a
这是我的真实代码:
这个函数读取一个字符
bool CStream::Read (int * _OutChar)
{
if (!bInitialized)
return false;
int iReturn = 0;
*_OutChar = fgetc (pFile);
if (*_OutChar == EOF)
return false;
return true;
}
这就是我使用它的方式:
char * SendData = new char[4096 + 1];
for (i = 0; i < 4096; i++)
{
if (Stream.Read (&iChar))
SendData[i] = iChar;
else
break;
}
【问题讨论】:
-
您对读取数据有什么问题吗?因为读取似乎没问题(假设打开模式是 std::binary),而且缓冲区的使用也是如此。
-
@Christophe 要打开我正在使用 fopen 并作为模式参数“ab+”的文件,我认为这是二进制文件。我接下来要做的是使用 ssl_write 将缓冲区发送到套接字,在那里我将缓冲区写回文件,但这失败了,因为接收到的缓冲区是不完整的,它只是将缓冲区写入' \0'
标签: c++ buffer fgets null-terminated