case 0
あなたは(x
タイプのchar
)文字に設定しようとしていますが、 (タイプの)C文字列case 1
に設定しようとしています。違いを生むのは引用のタイプです。単一引用符は文字を表し、二重引用符は C スタイルの文字列を表します。x
char const[2]
両方の文字列に設定する場合は、0
inを二重引用符で囲みます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*
を使用する場合は、バッファーを適切に終了する必要があります。したがって、次のいずれかの方法で行う必要があります。strcat
NULL
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[]
。