我有一个类型的迭代器:
std::map<int, std::string>::const_iterator
正如您所见,地图正在存储std::strings
。
我正在尝试使用以下方法提取值:
x.second.c_str()
并将其传递给函数以调用regex.h函数regexec(),该函数接受char*
。做这个的最好方式是什么?我从这种方法中得到basic_string
编译错误。
更新
std::map<int, std::string> map;
.
.
.
std::map<int, std::string>::const_iterator f = map.find("something");
if (f != map.end()) {
my_func(f->second.c_str());
.
.
.
.
void my_func(char* c){
std::cout << c << std::endl; //This causes a segmentation fault
}
答案 0 :(得分:0)
你应该做
int error=regexec(®ex,cppstring.c_str(),nmatch,pmatch,eflags);
regexec()的第二个参数和std :: string :: c_str()的返回值都是(const char *),所以这可能不是你问题的原因。
您应该发布编译器错误消息以及您怀疑导致问题的代码部分。
答案 1 :(得分:0)
这是一个非常疯狂的猜测,尽管我可能会因为给出的矛盾和不完整的信息而误导:
char*
为参数的函数,例如就像问题中提供的my_func
一样。const_iterator
,最终获得对const字符串的引用,并在其上调用c_str()
。看起来有点像这样:
void my_func(char*);
int main() {
std::map<int, std::string> theMap;
// ...
std::map<int, std::string>::const_iterator cit = theMap.find(3);
assert(cit != theMap.end());
my_func(cit->second.c_str()); //problematic line
}
在这种情况下,您应该收到编译错误,因为c_str()
会返回const char*
。虽然你的函数需要char*
,但两者不兼容。
但是,我的假设存在一些缺陷:
const char*
到char*
的转换,不应该对basic_string
regexec
无关(但您的示例代码都没有)如果你对问题有所了解,我将能够就出现问题的方式提供更具体的提示。