case 0あなたは(xタイプのchar)文字に設定しようとしていますが、 (タイプの)C文字列case 1に設定しようとしています。違いを生むのは引用のタイプです。単一引用符は文字を表し、二重引用符は C スタイルの文字列を表します。xchar const[2]
両方の文字列に設定する場合は、0inを二重引用符で囲みますx = '0'。
文字に設定xする場合は、両方に一重引用符を使用し、 のよう*xにポインターを逆参照して*x = '0'、 、 または*x = '1'にするか、 の型を (文字へのポインター) からx(文字) に変更します。その後、逆参照する必要はありません。1char*char
繰り返しになりますが、文字列に設定しようとしている場合はx、C 文字列の代わりに C++ 文字列を使用した方がよいでしょうstd::string。次に、C 文字列のように二重引用符で囲みますが、自動メモリ管理、境界チェック、およびそれが持つすべてのメンバー関数など、さまざまな追加機能を利用できます。
1 Nicolas Grebille が指摘したように、それを行う前に、次charのいずれかを使用して、有効な を指していることを確認してnewください。
char* x = new char;
またはchar、スタック上に を作成することによって:
char c;
char* x = &c;
重要:
後で (または C 文字列を期待する関数で)char*を使用する場合は、バッファーを適切に終了する必要があります。したがって、次のいずれかの方法で行う必要があります。strcatNULL
char x[2] = {}; // on the stack, filled with NULLs
// use a bigger number if you need more space
また
char* x = new char[2]; // on the heap, use more than 2 if you're
// storing more than 1 character
x[1] = NULL; // set the last char to NULL
そうしないと、運が悪いとガベージが発生し、運が良ければセグメンテーション違反になります。
x次に、上記のように宣言した後、*x = '0'何をしてもかまいません。
を使用する場合new[]は、対応する でメモリの割り当てを解除してくださいdelete[]。