2
static char a[255] = "\0";
and
const char *b = " ";

ここで、aとbに「abc」を割り当てると、残りの252バイトは「\ 0」のままになり、bの場合はそのようにはなりません。ですから、比較してみると違うことがわかります。1つの解決策は、strncmp()で行うように、sizeof(b)まで比較することです。それを行う他の方法はありますか?おそらく、あるものを別のものに変換することによって?

前もって感謝します。

4

2 に答える 2

6

これ、「残りの252バイト」bがないためです。2つの文字だけを含むメモリへのポインタとして作成されます。b<space><nul>

に割り当てるときは、実際には4文字、、、およびbを指すようにポインタを変更しますが、その後は安全に使用できるものは何もありません。abc<nul>

strcmpstrncmpは、安全ではないと言うnamby-pambyを愛するタイプにもかかわらず、Cで文字列を比較するための受け入れられた方法です* a、しかし、そもそもCでの正しいコーディングはありません:-)


*a文字列がnullで終了していない可能性がある場合安全ではありません。しかし、繰り返しになりますが、それらがnullで終了していない場合、技術的には文字列ではありません。文字列を処理strcmpするために、は仕事に適したツールです。

于 2010-10-29T05:54:32.167 に答える
1

まず、bに「abc」を割り当てたくありません。値を変更すると、Cスタイルの文字列でメモリリークが発生します。

比較するには、strcmp関数を使用します。それは図書館にあります。

于 2010-10-29T05:52:26.150 に答える