我有以下代码:
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)
线.我怎样才能解决这个问题?
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)