0

カーバイドc/c++でcコードのこの部分を使用しています

   char c1[]={0x01};
   char c2[]={0x02};
   char*  c [] = {c1,c2};

c[0]、c[1]の値をチェックすると..デバッグモードでこのような2つの値が表示されます

c[0] = \x01\x01 & (x) = *[0] = \x01  
c[1] = \x02\x01\x01 & (x) = *[1] = \x02

そして、私がこのように長さを計算すると

int cclen2 = strlen(c[0]); 

取得cclen2 = 2; しかし、私は値を1として取得する必要があります。

4

2 に答える 2

3

c1null ターミネータをc2持たず、null ターミネータが必要です (たとえばstrlen()、他の多くの C 文字列処理関数と共に)。printf("%s", c1)null ターミネータは、文字列リテラルを使用して を初期化する場合にのみ暗黙的に追加されますchar[]

次のいずれかに変更します。

char c1[] = { 0x01, 0x00 };
char c2[] = { 0x02, 0x00 };

また:

char c1[] = "\x01";
char c2[] = "\x02";
于 2012-08-08T07:55:11.740 に答える
1

Array は、特別なタイプの定数ポインターを作成します。これを char として宣言すると、最後に null 文字が追加されます。実際には、c[0] ステートメントは *(c+0); に置き換えられます。アドレスを取得する c.

strlen(c[0]) は strlen(c) に置き換えられます。null文字までの文字列の全長を取得します。

これで十分な説明だと思います。

于 2012-08-08T09:40:23.843 に答える