我不知道它是否可能,但有没有办法检索文件的前4个字节(很可能是BOM)以获得其编码类型(UTF-8,UTF-16LE) ,CP1252等...)。然后,如果选择的文件是以UTF-8编码的,则在数组中找到的值" tabBytes []"会是这样的:
tabBytes[0] = 0xEF
tabBytes[1] = 0xBB
tabBytes[2] = 0xBF
tabBytes[3] = XXXX
感谢您抽出宝贵时间帮助我!我期待着阅读你的意见和答案。
编辑:我是C ++的新手,所以我之前编写的代码可能不对,因此我删除了它。最终编辑:最后我找到了解决问题的方法,感谢那些帮助我的人!
答案 0 :(得分:4)
数组索引从0开始,因此您使用buffer[fourBytes] = '\0';
写入缓冲区的末尾。如果要这样做,则需要分配fourBytes + 1
个字节。这应该可以阻止您在删除缓冲区时遇到的崩溃。
然而,像这样的空终止缓冲区的唯一原因是,如果你想把它当作C风格的字符串(例如将其打印出来),你似乎并没有这样做。您已将其复制到tabBytes
,但您不复制空终结符。因此,目前还不清楚你正在努力实现的目标。
从文件中读取前几个字节的整体逻辑很好。虽然基于上面的代码,您可以直接将数据读入tabBytes
并取消buffer
的分配/复制/免费。