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

これを書くと(とにかくこれを書く正しい方法です)、すべてが明確になります:constデータを指し、ポイントするpデータは変更できないことを意味します。 .pstrcpy

これを上書きしたい場合はp、配列として宣言する 1 つの方法:

char p[] = "Hello";  //OK
strcpy (p,"bye");    //OK - for any string (2nd arg) of length <= 5

C++ では、可能な限りstd::stringchar*およびを使用しないでください。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 に答える