【发布时间】:2020-10-02 21:12:24
【问题描述】:
#include <string>
using namespace std;
ifstream input = "foo.txt";
string val;
getline(inputFile, val); //using ifstream, no empty string
//val = "hello"
cout << val[0] // \357
cout << val[3] // h
所以按照我的理解,我将指针存储在前三个字节中而不是字符值中?有没有办法让我可以访问[0]处的角色?我使用 std::string
【问题讨论】:
-
请给我们minimal reproducible example,表明您正在获取内存地址。
std::string::operator[]返回一个char,所以你不应该得到地址。 -
如果它来自保存在磁盘上的 UTF-8 文件,那么前 3 个字节很可能是 UTF-8 BOM。前 3 个字节是
0xEF,0xBB,0xBF吗?如果是这样,那就是 UTF-8 BOM,可以忽略。 -
@Dai 你应该把你的评论变成答案。
-
UTF-8 BOMs 是一个 aBOMation :(
-
@Botje 是的,但是如果您使用的是 Microsoft 软件,那么您几乎会被它们所困扰。除非您使用 BOM,否则他们的东西几乎普遍拒绝识别 UTF-8 文件。
标签: c++