C++从char*到char的转换无效(char*=*string.begin())

Pet*_*111 4 c++ char readfile

我有以下代码:

std::string extract() {

    fstream openfile("/home/name/Documents/testfile");
    std::string teststring;
    long location = 4;
    long length = 2;
    teststring.resize(length);
    char* begin = *teststring.begin();
    openfile.seekp(location);
    openfile.read(begin, length);

    return teststring;
}
Run Code Online (Sandbox Code Playgroud)

此代码应返回文件中找到的字符串.例如,如果文件的内容是

StackOverflow
Run Code Online (Sandbox Code Playgroud)

这个方法应该返回

kO
Run Code Online (Sandbox Code Playgroud)

此代码由友好的StackOverflow用户提供给我.我的问题是,我得到一个编译错误,上面写着:"从char*到char的转换无效".问题是

char* begin = *teststring.begin();
Run Code Online (Sandbox Code Playgroud)

线.我怎样才能解决这个问题?

Jts*_*Jts 5

teststring.begin()返回一个迭代器,如果你用*运算符取消引用它,你会得到一个char(char&)的引用.

因此,您可以将其地址视为:

char* begin = &*teststring.begin();
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

char* begin = &teststring[0];
Run Code Online (Sandbox Code Playgroud)

要么

char* begin = &teststring.front() //(C++11) [@Jonathan Wakely]
Run Code Online (Sandbox Code Playgroud)

向量也是如此.在向量(C++ 11)data()中添加了一个新函数,它返回一个指向T的指针;

所以用你可以做的矢量

char * begin = myvector.data(); // (if T is char)
Run Code Online (Sandbox Code Playgroud)