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

时间:2016-02-09 18:57:51

标签: 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;
}

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

StackOverflow

此方法应返回

kO

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

char* begin = *teststring.begin();

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

2 个答案:

答案 0 :(得分:5)

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

因此,您可以将其视为:

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

或者你可以这样做:

char* begin = &teststring[0];

或者

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

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

所以用你可以做的矢量

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

答案 1 :(得分:1)

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

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

如果迭代器迭代char值。

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