该解决方案可能微不足道,但在cpp中我并不生动。
执行代码后,function strlen((char*)buffer)
的值比我想的要高。这是为什么?我该如何解决?
(if filesize=48, than strlen((char*)buffer)=64
,它也应该是48!)
ifstream iffile;
iffile.open(argv[1], ios::in | ios::binary | ios::ate);
if (iffile.is_open())
{
long filesize = iffile.tellg();
if (filesize > 0)
{
iffile.seekg(0, ios::beg);
{
long pos = iffile.tellg();
if (pos != filesize)
{
char *buffer;
buffer = (char *)malloc(filesize * sizeof * buffer);
if (buffer != NULL)
{
memset(buffer, 0, filesize - pos);
iffile.read((char *)buffer, filesize);
此外,我不得不提到,我的文件中有很多不可打印的值。
最佳答案
您的代码假定文件包含一个终止的'\0'
字符,以使字符数组成为字符串。此终结符是strlen()
所寻找的,因此,如果不存在,则必须添加它。
确保的一种方法是malloc()
(顺便说一句,应该是new[]
或C ++中更高级的东西)比file_size
多1个字符,并在加载后将其设置为'\0'
。
另外,您必须检查分配和I / O是否成功。
关于c++ - 不同大小的预期malloc函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15390243/