使用size_t差异复制字符串的一部分

时间:2012-07-29 14:35:23

标签: c++ size-t

我正在尝试迭代字符串并根据初始键值和标识信息块结束的键值复制信息块。然而,当我尝试减去我的初始值和最终值以找到我正在寻找的块的长度时,我收到一个看似随意的值。

所以起始和结束指标可以通过以下方式找到:

currentstringlocation = mystring.find("value_im_looking_to_start_at, 0);
endlocation = mystring.find("value_im_looking_to_stop_at", currentstringlocation);

然后我尝试做类似的事情:

mystring.copy(newstring,(endlocation-currentlocation), currentlocation);

然而,这并没有给我我想要的结果。这是我的代码及其产生的输出的摘录。

stringlocation2=topoinfo.find("\n",stringlocation+11);
topoinfo.copy(address,(stringlocation2-stringlocation+11),stringlocation+11);
cout << (stringlocation2-stringlocation+11) << "\n";
cout << stringlocation2 << "\t" << stringlocation+11 << "\n";

输出: 25 59 56

很明显我试图捕获的信息大小跨越3个字符,但是当我减去两个时我得到25.有人可以向我解释为什么会发生这种情况以及我如何解决它?

2 个答案:

答案 0 :(得分:3)

你正在计算错误的长度,尝试改为:

topoinfo.copy(address, stringlocation2 - (stringlocaion + 11),
              stringlocation + 11);

在此之后,address将包含复制的字符串。但请记住:如果address是字符数组或字符指针,那么应该自己添加终结'\0'字符!

获取子字符串的更好解决方案是实际使用std::string::substr函数:

std::string address = topoinfo.substr(stringlocation + 11,
                                      stringlocation2 - (stringlocaion + 11));

答案 1 :(得分:1)

应该是

topoinfo.copy(address,stringlocation2-(stringlocation+11),stringlocation+11);
cout << stringlocation2-(stringlocation+11) << "\n";

你的括号错了。