将char*复制到char*

Zee*_*e99 7 c++ char

这是我的代码的一部分:

extern "C" REGISTRATION_API int extreme(char* lKey)
{
string s1; 
char *p=NULL;
try
{
    ifstream myfile ("extreme.txt");
    int i=0;
    if (myfile.is_open())
    {
    while (getline(myfile,s1))
       {
        switch (i)
         {
        case 1:
         strcpy(p,s1.c_str());
         lKey=p;
        break;
             //continue here
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

现在当我从外部应用程序调用此函数时,我收到此错误:

AccessViolationException:
尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

问题是由于这个原因:

lKey=p;
Run Code Online (Sandbox Code Playgroud)

我怎样才能分配lKeyp

Ale*_*ler 11

您需要预先分配传递给的内存strcpy.即,p = new char[s1.length()+1];它将做它(终止0字符的+1).但是,std::string没有充分理由混合和C字符串例程并不是一个好主意.更好的坚持std::string,它将为您省去很多麻烦.

lKey=p不会工作 - 它只是将本地地址复制p到局部变量lKey.来电者甚至不会看到差异.


Jam*_*ran 10

实际上问题是strcpy(p,s1.c_str());因为p永远不会设置为NULL而是NULL.


Bri*_*ndy 8

请记住,a char*只是内存位置的地址.您需要在该地址分配内存.

在您的代码中,您没有分配使用的内存,并且您没有将p设置为指向该内存地址.

strcpy 不分配缓冲区,只需要一个内存地址来复制数据.

如果你将缓冲区传递给函数,那么你可能只需要这个(并删除p)

strcpy(lKey, s1.c_str());
Run Code Online (Sandbox Code Playgroud)