2012-08-11 102 views

回答

2

首先,你应该为你的字符串分配内存,这样的:

char *p = new char[BUFFER_LENGTH]; 

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

strcpy(p, "bye"); 

有关使用方法,请参阅this page d。

不要忘记删除内存当您完成:

delete[] p; 

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

+0

例如BUFFER_LENGTH
'const int BUFFER_LENGTH = 100;' – Abhi 2012-08-11 18:50:43

+0

不会像制作它一样'char a [10] =“Hello”; – 2012-08-11 18:51:16

+0

一个是动态分配另一个在堆栈上,是的。这是不一样的。但是,使用指针时,通常需要动态分配。 – xQuare 2012-08-11 18:56:54

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

一个好的编译应该在第一行给出警告(或错误),因为这是过时的,并且语言要求您将其编写为:

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

一旦你写的(这是写这个,反正正确的方法),那么一切都变得清晰:p常量数据,是指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. 

太简单了!

+0

所以我不应该使用指针正确的strcpy? – 2012-08-11 18:54:33

+3

@MohamedAhmedNabil:问题不是'strcpy'。你不能使用'const char *'或字符串作为目的地。 – Blastfurnace 2012-08-11 18:55:56

+0

此外,如果新字符串大于char-array创建的字符串,则即使使用'p []'解决方案也会导致问题。如果您计划使用C++,请使用正确的方式并使用std :: string,但它根本不会受到伤害。 :) – Excelcius 2012-08-11 19:26:50