好的,这就是我现在一直在与之斗争的东西,我一直无法取得成果,我怎么能从头到尾复制一切,Code看起来像这样
#include <stdio.h>
#include <stdlib.h>
#include <iosteream>
#include <Windows.h>
using namespace std;
int main()
{
char name[50] = "Jason Statham";
char *namesearch = strstr(name,"Jason"); // get position
std::copy(name); //Copy Full Details concerning name From beginning to end. - problem
MessageBoxA(NULL, (char*)name, "", MB_OK);
return 0;
}
答案 0 :(得分:1)
要使用copy()
,您首先需要加入<algorithm>
。然后你可以这样做:
if(namesearch) // make sure string was found
std::copy(namesearch, name+sizeof(name), name);
其中namesearch
是要复制的起始元素,name+sizeof(name)
(或更好namesearch+strlen(namesearch)+1
)是要复制的最后一个元素,name
是目标。
在你的例子中,你不会看到任何特别的东西,因为&#34; Jason&#34;已经在开始了。
修改强>
如果您想插入,则无法使用copy()
,但必须使用copy_backward()
:
char *insertpoint = name + 5; // at the end of Jason
char middle[] = " Donbell";
std::copy_backward(insertpoint, insertpoint+strlen(insertpoint)+1, insertpoint+strlen(insertpoint)+1+strlen(middle));
std::copy(middle, middle+strlen(middle), insertpoint);
但是这段代码只是一个概念证明,因为在任何情况下你都需要检查你的插入是否会产生缓冲区溢出(即strlen(name)+1+strlen(middle)<sizeof(name)
)
因此,如果您打算进行大量的字符串操作,我强烈建议您查看std::string()
。
以下是它的样子:
string nm = "xx Jason Statham";
auto ns = nm.find("Jason"); // find the start of "Jason"
if (ns!=std::string::npos) { // if it was found....
nm = nm.substr(ns); // take a substring starting at the found position
nm.insert(5, " Donbell"); // insert a string at poistion 5
} // and all this without risk of buffer overflow !