我正在写一个函数,根据特定字符的位置将C++ string
分成两个独立的string
。但是,当我使用它返回的指针时,它们似乎是无效的。这里有一个例子:`std :: string :: substr`返回无效指针?
#include <iostream>
#include <string>
bool SplitString(std::string &input, char splitChar, std::string **left, std::string **right)
{
std::string::size_type offset = input.find(splitChar);
if (offset == std::string::npos) return false;
*left = &input.substr(0, offset);
*right = &input.substr(offset + 1);
return true;
}
int main(int argc, char *argv[])
{
std::string input = "Left side:Right side";
std::string *left;
std::string *right;
if (SplitString(input, ':', &left, &right)) {
std::cout << "left = \"" << *left << "\"" << std::endl;
std::cout << "right = \"" << *right << "\"" << std::endl;
} else {
std::cout << "Didn't find ':' - this shouldn't happen!" << std::endl;
}
return 0;
}
这应该输出如下:
left = "Left side"
right = "Right side"
为什么不工作?
为什么不直接发送对这些函数的字符串引用?为什么所有的指针都疯了? – PaulMcKenzie 2014-10-20 01:31:20
这就是你得到一个右值的地址。 – 2014-10-20 01:31:25
stdd :: string :: substr不返回一个std :: string *,它返回一个std :: string。你得到一个返回值的地址,当你调用你的第二个std :: string :: substr时,它将被覆盖。只需复制字符串。摆脱所有这些指针,并使用std :: string。 – Ben 2014-10-20 01:44:46