我已經來到到的東西是纏着我
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