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)
我有以下代码:
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)