0

可能重复:
使用 strcpy 时访问冲突?

我遇到了困扰我的事情

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

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

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

谢谢

4

2 回答 2

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. 

很简单!

于 2012-08-11T18:43:13.243 回答
2

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

char *p = new char[BUFFER_LENGTH];

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

strcpy(p, "bye");

请参阅此页面了解如何使用它。

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

delete[] p;

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

于 2012-08-11T18:42:56.860 回答