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

C++ Invalid conversion from char* to char (char* = *string.begin() )

我有以下代码:

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;
}

此代码应该 return 在文件中找到的字符串。例如,如果文件的内容是

Whosebug

这个方法应该return

kO

此代码是由友好的 Whosebug 用户提供给我的。我的问题是,我收到一个编译错误,上面写着:"Invalid Conversion from char* to char"。问题是

char* begin = *teststring.begin();

行。我该如何解决这个问题?

如果您想将迭代器值转换为基础数据,有一个技巧可以获取指向第一个元素的指针。

auto iterator_testdata = testdata.begin();
char* first_element_in_testdata = &(*iterator_testdata);

假设迭代器迭代 char 值。

这个技巧也适用于 vector::begin() 和类似的连续容器。小心使用。

teststring.begin() returns 一个迭代器,如果您使用 * 运算符取消引用它,您将获得对 char (char&) 的引用。

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

char* begin = &*teststring.begin();

或者你可以这样做:

char* begin = &teststring[0];

或者

char* begin = &teststring.front() //(C++11) [@Jonathan Wakely]

向量也是如此。在 vector (C++11) 中,添加了一个名为 data() 的新函数,其中 returns 指向 T 的指针;

所以你可以用向量做

char * begin = myvector.data(); // (if T is char)