该解决方案可能微不足道,但在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/

10-09 18:33
查看更多