unsigned char *の長さはどのようにして決まりますか?unsigned char *の長さはどのようにして決まりますか?
答えて
ポインタの実際のサイズの場合:
size_t s = sizeof(unsigned char*);
あなたは、文字列の長さが必要な場合:unsigned char型によって
unsigned char* bla = (unsigned char*)"blabla";
int s = strlen((char*)bla);
"blabla"は読み取り専用文字列を生成するので、blaはconst unsigned char *でなければなりません。 –
これはコンパイルしないでください。 "blabla"はconst char *です。const char *をunsigned char *に代入することはできません。 –
これは割り当てではなく、常に初期化されています。 –
を*私はあなたがそのポインタの位置の文字列を意味しているとします。その場合、次のようになります。
strlen(your_string_pointer)
ただし、これは\ 0位置のみを検出します。保証されていないのは、実際に割り当てられたメモリブロックサイズです。
http://www.cplusplus.com/reference/clibrary/cstring/strlen ... strlenは "const char *"を取ります。 – xtofl
これには2つの意味があります。あなたはちょうどポインタの種類の大きさを知りたいですか?そうしてJoceの答えが正しい
size_t size = sizeof(unsigned char*);
ある場合は、ポインタにポイントを行いますどのように多くの要素を知りたい場合は、それは少し複雑です。これがCスタイルの文字列であれば、strlenまたはいくつかの亜種が最適です。
しかし、これがCスタイルの文字列と関係のないunsigned charへのポインタにすぎない場合は、探しているものを確実に達成する方法がありません。 C/C++では、長さフィールドをポインタに関連付けません。あなたは、ポインタで長さを渡すか、ポインタと長さの両方を格納するベクトルのようなクラスを使用する必要があります。
あなたは割り当てられた長さを取得することができないということは正しくありません。 2つの意味があるのは間違っています。つまり、ゼロで終了する文字列の長さを知る必要があるかもしれませんが、符号付きのcharを使う方が良いでしょう。 2分半にしてください:) – xtofl
として報告されますunsigned char *では、操作する前にまずstd :: stringに入れておくほうがよいでしょう。そうすれば、あなたはあらゆる種類のことをやり遂げることができ、必要に応じていつでも長さや容量を得ることができます。
私はあなたがその配列にサイズを不変にするために何かをしていると仮定しています。割り当て、設定、忘れているだけの場合は、配列の実際の割り当てサイズを別々の変数に格納することができます。構造体/クラスを作成することもできます。
//WARNING: memory issues not addressed here.
struct myStringStruct
{
unsigned char * string;
int len;
allocate(int size) {
len = size;
string = malloc(sizeof(unsigned char) * len);
}
}
これ以上複雑ではなく、あなたはstd :: stringを再発明しています。
理想的な世界では、あなたはそうではありません。あなたは、Cスタイルの文字列(NULで終了し、長さを測定することができます)とunsigned char *にはchar *を使用します(長さは別のパラメータなどで、おそらく例えばvector<unsigned char>
またはbasic_string<unsigned char>
のようなSTLコンテナ)。
根本的な問題は、charとunsigned charの記憶表現が同じかどうかについて、移植性のある仮定をすることができないことです。彼らは通常はそうですが、そうでないことは許されています。したがって、unsigned char *を扱う文字列のようなライブラリ関数はchar *のみではなく、unsigned char *をsigned char *にキャストしてその結果を文字列として扱うのは一般的に安全ではありません。 charは署名されている可能性があるので、unsigned char *をchar *にキャストしないことを意味します。
ただし、0は常にunsigned charとcharの値表現と同じです。非理想的な世界では、どこかからCスタイルの文字列が得られていても、それがunsigned char *として到着していれば、(a)char *にキャストして取得しますが、(b )誰があなたにこれをしたかを見つけて、彼らに止めてください。
- 1. char *、unsigned char *およびsigned char *のエイリアシングは、任意のエイリアスになります。
- 2. unsigned charのビットをどのように初期化できますか?
- 3. unsigned charにはどのような値を割り当てることができますか?
- 4. unsigned char *の長さ?私はエラーなし符号なしのパラメータの長さを取得するにはどうすればよい
- 5. どのようにSystem :: Drawing :: Image ^をunsigned charに変換する
- 6. gdbのunsigned char表現は矛盾していますか?
- 7. なぜunsigned char << unsigned charの結果がunsigned charではない
- 8. Cの符号付きchar []をunsigned char []に変換します
- 9. Cを使ってunsigned charの長さを計算する方法は?
- 10. 私はCを持っているC++のunsigned char配列の長さ
- 11. osx lionでは127のunsigned charに制限されていますか?
- 12. reinterpret_castはcharとunsigned charの間のポインタを落としますか?
- 13. javascriptまたはcssのcharの長さの弾力性はどうですか?
- 14. 定数のアクセシビリティはどのようにして決まりますか?
- 15. unsigned char配列とはどのように宣言して初期化するのですか
- 16. SWIGはCからPythonにunsigned char *を返します
- 17. Cobol - PIC Nフィールドのコンテンツの長さと位置はどのようにして決められますか?
- 18. はunsigned char *のSymbian C++
- 19. const unsigned char *文字列またはconst char *への変換/ *
- 20. C:はunsigned char *は他のunsigned char型に配列複写要素バイト・アレイ
- 21. Arduino: `I2CRW :: readByte(unsigned char、unsigned char) 'への未定義の参照。
- 22. unsigned char *をcのunsigned int *に変換する方法は?
- 23. unsigned char comparision
- 24. char * textMessages []はどのようにメモリにフォーマットされていますか?
- 25. (int)(unsigned char)(x)はCで何をしますか?
- 26. System :: Byteのギザギザの配列をunsigned char **に変換します。
- 27. JRE6で配布されているrhinoのバージョンはどのようにして決まりますか?
- 28. "unsigned char *"を "char *"(そして文字列)に変換する
- 29. unsigned char配列をuint8_t配列に変換しますか?
- 30. ctype.hにはまだunsigned charが必要ですか?
ほとんどの答えは、要素の数、ポインタを含む変数のサイズ、または(符号なしの)文字をゼロ終了文字列と呼んでいますか?という意味の "長さ"を指定する必要があることを示していますか? – xtofl