将char *复制到char *

时间:2010-07-15 14:23:13

标签: 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
         }
      }
   }
}

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

  

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

问题是由于:

lKey=p;

如何将lKey分配给p

4 个答案:

答案 0 :(得分:11)

您需要预先分配传递给strcpy的内存。即p = new char[s1.length()+1];将执行此操作(终止0字符为+1)。但是,没有充分理由混淆std::string和C字符串例程并不是一个好主意。最好坚持使用std::string,这样可以省去很多麻烦。

同样lKey=p也不起作用 - 它只是将p的本地地址复制到本地变量lKey中。来电者甚至看不出差异。

答案 1 :(得分:10)

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

答案 2 :(得分:8)

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

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

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

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

strcpy(lKey, s1.c_str());

答案 3 :(得分:0)

  1. 消除p(这里什么也不做),并将数据从s1直接复制到lkey
  2. 不打败你,但缩进计划是一个讽刺,请从某个地方发出好的风格(google 1tbs)