0

プログラムで文字列のサイズを取得しようとしているので、後でループを使用して char に変換できますが、プログラムが返すサイズは実際のサイズよりも 5 桁小さくなっています。なぜこれが起こるのでしょうか?

std::string theFileName = fileNames[ curTab ];
int size = sizeof( theFileName );

プログラムをデバッグするとき、これを theFileName に保存します。

theFileName = "C:\Users\Vincent\Desktop\Untitled.txt"

そして、これはサイズで:

サイズ = 32

FileName の文字数を数えると、実際には 37 文字です。何が原因でしょうか? MS Visual C++ 2010 Express を使用してメモ帳プログラムを作成しています。

4

5 に答える 5

2

sizeofデータ構造とそのすべてのメンバー データのサイズがわかります。ただし、文字列オブジェクトは通常、文字列データをヒープに格納します。つまり、これはメンバー データではありませんが、オブジェクトがそれを所有し、それへのポインタを格納します。

文字列オブジェクトのサイズを取得する正しい方法は、size()またはlength()メンバー関数を呼び出すことです。

于 2013-11-03T21:49:21.523 に答える
1

std::string文字の配列ではありません。std::stringオブジェクトによって管理される動的配列です。sizeof指定されたデータ型のサイズを返します。文字列の場合は、配列へのポインタに静的に割り当てられた文字の量を加えたものです (これは一般的な文字列の最適化です)。

size()使用する必要があるのは、文字列の長さを返す組み込み関数です。

于 2013-11-03T21:46:47.543 に答える
1

コンテンツのサイズは

theFileName.size()

whilesizeofはオブジェクトのサイズを返しますstd::string。オブジェクトには、たとえば、コンテンツの場所へのポインターと、長さを表す符号なし整数を含めることができます。sizeofしたがって、1 つのポインターのサイズと符号なし整数が含まれます。これは内容を変えても変わりません。

于 2013-11-03T21:46:59.107 に答える
0

sizeofバイト単位で測定されたデータ型のサイズを計算するために使用されます。

プログラムで使用する必要がある関数はsize.

于 2013-11-03T22:34:08.487 に答える
0

std::string オブジェクトのサイズは、含まれる文字列のサイズとは無関係です。この目的のために提供されている std::string メンバー関数を使用します。

于 2013-11-03T21:46:15.757 に答える