2
string str; str="hello"; str.length(); sizeof(str);

str.length が長さをバイト単位で返すことがわかりました。 sizeof(str) が同じ値を返さないのはなぜですか?

strlen(str) である ac コマンドに代わる c++ はありますか? C ++でのこのコマンドの代替は何ですか?

send 関数で winsock を使用すると、長さをバイト単位で返します。何を使えばいいですか?長さ? または sizeof(str)? 他の何かを宣伝しますか?それらが異なる結果を生み出すのを見ているからです。

4

4 に答える 4

4

sizeof は、contains 内のデータのサイズではなく、データ構造のサイズを返します。

length() は str に含まれる文字列の長さを返します。これは必要な関数です

sizeof(char[30]) が 30 であるため混乱するかもしれませんが、それはデータ構造のサイズが 30 であり、何を入れても 30 のままであるためです。

文字列は実際には非常に複雑な構造ですが、ポインターと長さを持つ単純なクラスであるとします。

class string
{
    char *data;
    int length;
};

sizeof(string) は以下を返します。

char * ポインターのサイズ。必ずしも 4 である必要はありません

int のサイズを足したもの。場合によっては必要ではありませんが、4

したがって、値は 8 になる可能性があります。データの値や長さは、構造体のサイズには影響しません。

于 2013-10-30T15:42:52.060 に答える
2

sizeof()文字列クラスで使用することを意図したものではありません。文字列クラスは文字列データだけを格納するわけではありません。そのデータと C スタイルの文字列の間に違いはありません。他のものも含まれているため、sizeof() がスローされます。文字列内の文字の実際の長さを取得するには、 を使用しますstr.length()
C++ 文字列オブジェクトで C strlen() を使用しないでください。sizeof() も使用しないでください。使用する.length().

于 2013-10-30T15:43:54.047 に答える
0

演算子sizeof()は、指定された型またはオブジェクトのサイズをバイト単位で返します。「型のバージョン」は非常に理解しやすいですが、「オブジェクトのバージョン」については、次の 1 つのことを覚えておく必要があります。

sizeof()型定義のみを見て、そのメンバーのサイズと数から合計サイズを推測します (一般に、多相型および複数の継承型には、追加の「隠し」メンバーがある場合があります)。

つまり、次のように仮定します。

struct A
{
  int* p1;
  char* p2;
};

ご想像のとおり、sizeof(A)8 が返されます (ほとんどの 32 ビット システムではポインターが 4 バイト型であるため)。しかし、次のようなことをすると:

A a_1;
a_1.p1 = new int[64];

sizeof(a_1)これは、new によって割り当てられ、A のメンバーによってポイントされたメモリが、このオブジェクトに「属していない」ためです。

そしてそれが理由sizeof(str)でありstr.length()、異なる結果をもたらします。std::stringヒープ上の文字にメモリを (動的に、 経由でmalloc()) 割り当てるため、文字列のサイズは変更されません。

したがって、ネットワーク経由で文字列を送信したい場合は、適切なサイズはstr.len()であり、 を呼び出すことでデータ ポインタを取得できますstr.c_str()

strlen(str)「同等」の部分がわかりませんでした。C++ にはstrlen()、まったく同じように機能する、同じプロトタイプを持つ関数もあります。が必要なだけなconst char*ので、 for には使用できませんstd::string(ただしstrlen(str.c_str())std::stringの内部文字列は null で終了することが保証されているため、使用できます)。すでに行ったように使用しますstd::string.length()

于 2013-10-30T15:56:37.043 に答える
0

std::stringC++ では、文字列の長さが可変であるため、文字列オブジェクトへのポインターとしてインスタンス化されます。sizeof()返されるのは、文字列オブジェクトへのポインターのサイズです (32 ビット マシンではおそらく4.

于 2013-10-30T15:45:19.467 に答える