static char a[255] = "\0";
and
const char *b = " ";
ここで、aとbに「abc」を割り当てると、残りの252バイトは「\ 0」のままになり、bの場合はそのようにはなりません。ですから、比較してみると違うことがわかります。1つの解決策は、strncmp()で行うように、sizeof(b)まで比較することです。それを行う他の方法はありますか?おそらく、あるものを別のものに変換することによって?
前もって感謝します。
static char a[255] = "\0";
and
const char *b = " ";
ここで、aとbに「abc」を割り当てると、残りの252バイトは「\ 0」のままになり、bの場合はそのようにはなりません。ですから、比較してみると違うことがわかります。1つの解決策は、strncmp()で行うように、sizeof(b)まで比較することです。それを行う他の方法はありますか?おそらく、あるものを別のものに変換することによって?
前もって感謝します。
これは、「残りの252バイト」b
がないためです。2つの文字だけを含むメモリへのポインタとして作成されます。b
<space>
<nul>
に割り当てるときは、実際には4文字、、、およびb
を指すようにポインタを変更しますが、その後は安全に使用できるものは何もありません。a
b
c
<nul>
strcmp
strncmp
は、安全ではないと言うnamby-pambyを愛するタイプにもかかわらず、Cで文字列を比較するための受け入れられた方法です* a、しかし、そもそもCでの正しいコーディングはありません:-)
*a文字列がnullで終了していない可能性がある場合は安全ではありません。しかし、繰り返しになりますが、それらがnullで終了していない場合、技術的には文字列ではありません。文字列を処理strcmp
するために、は仕事に適したツールです。
まず、bに「abc」を割り当てたくありません。値を変更すると、Cスタイルの文字列でメモリリークが発生します。
比較するには、strcmp関数を使用します。それは図書館にあります。