2012-08-11 107 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