我已经来到到的东西是缠着我
char* p = "Hello"; strcpy (p,"bye");
这总是给我一个错误,那么我怎样才能用指针字符串使用strcpy。
(和请人告诉我用的std :: string)
谢谢
我已经来到到的东西是缠着我
char* p = "Hello"; strcpy (p,"bye");
这总是给我一个错误,那么我怎样才能用指针字符串使用strcpy。
(和请人告诉我用的std :: string)
谢谢
首先,你应该为你的字符串分配内存,这样的:
char *p = new char[BUFFER_LENGTH];
然后您可以将内容复制到其中:
strcpy(p, "bye");
有关使用方法,请参阅this page d。
不要忘记删除内存当您完成:
delete[] p;
你也可以提供更多的信息,如果我理解你的问题的错误的方式
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.
太简单了!
所以我不应该使用指针正确的strcpy? – 2012-08-11 18:54:33
@MohamedAhmedNabil:问题不是'strcpy'。你不能使用'const char *'或字符串作为目的地。 – Blastfurnace 2012-08-11 18:55:56
此外,如果新字符串大于char-array创建的字符串,则即使使用'p []'解决方案也会导致问题。如果您计划使用C++,请使用正确的方式并使用std :: string,但它根本不会受到伤害。 :) – Excelcius 2012-08-11 19:26:50
例如BUFFER_LENGTH
'const int BUFFER_LENGTH = 100;' – Abhi 2012-08-11 18:50:43
不会像制作它一样'char a [10] =“Hello”; – 2012-08-11 18:51:16
一个是动态分配另一个在堆栈上,是的。这是不一样的。但是,使用指针时,通常需要动态分配。 – xQuare 2012-08-11 18:56:54