C ++:使用带指针字符串的Strcpy

时间:2012-08-11 18:39:19

标签: c++ arrays string pointers strcpy

  

可能重复:
  Access violation when using strcpy?

我遇到了困扰我的事情

char* p = "Hello"; strcpy (p,"bye");

这总是给我一个错误,那么如何将strcpy与指针字符串一起使用。

(请没有人告诉我使用std :: string)

谢谢

2 个答案:

答案 0 :(得分:7)

char* p = "Hello";   //BAD - OBSOLETE!
strcpy (p,"bye");

一个好的编译器应该在第一行给出你的警告(或错误),因为它已经过时,语言要求你把它写成:

char const * p = "Hello";  //GOOD

一旦你写了这个(无论如何这是写这个的正确方法),那么一切都变得清晰:p指向 const 数据,意味着p的数据指向无法 修改,这反过来暗示,您无法使用strcpy(或手动)覆盖它。

如果要覆盖此内容,可以将p声明为数组:

char p[] = "Hello";  //OK
strcpy (p,"bye");    //OK - for any string (2nd arg) of length <= 5

在C ++中,您应该使用std::string,尽可能避免使用char*char[]。因此,编写代码的C ++方法就是这样:

#include <string>   //must include this first

std::string p = "Hello";
p = "bye"; //overwrite it. 

这么简单!

答案 1 :(得分:2)

首先,你应该为你的字符串分配内存,如下所示:

char *p = new char[BUFFER_LENGTH];

然后你可以将内容复制到其中:

strcpy(p, "bye");

请参阅this page了解其使用方法。

完成后不要忘记删除内存:

delete[] p;

如果我以错误的方式理解您的问题,您还可以提供更多信息