我已获得以下代码:
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();
线。我该如何解决这个问题?
答案 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()和类似的连续容器。小心使用。