実際にはC/C++で "C-string"という単語が意味するものは何ですか? charへのポインタ?文字の配列ですか?または、const-pointer/constの文字配列ですか?C/C++でのC-ストリングの定義
答えて
"C文字列"は、0(ヌル文字)バイトで終わる文字の配列です。配列ではなく、ポインタはの文字列です。したがって、C文字列の任意の末端部分配列もまたC文字列である。 char *
(またはconst char *
など)のポインターは、しばしば文字列のポインターと見なされますが、実際には文字列の要素へのポインターで、通常の文字列要素へのポインターとして扱われます。
charへのポインタはC-文字列ではありませんか? – FrozenHeart
@NikitaTrophimov No. R ...それは非常に正確に言った:Cの文字列は '\ 0 'で終わる文字の配列である。 'char *'と 'char const *'はC文字列を参照するために使われることが多いですが、それ自体はC文字列ではありません。 –
ありがとうございます! – FrozenHeart
constまたは非constの文字配列。末尾の0文字で終了します。だから、次のすべてがCの文字列です:
char string_one[] = { 'H', 'e', 'l', 'l', 'o', 0 };
char string_two[] = "Hello"; // trailing 0 is automagically inserted by the compiler
const char *string_three = "Hello";
配列とポインタは同じものなので、どちらもC文字列として扱うことができますか? – FrozenHeart
@NikitaTrophimovいいえ、配列とポインタは同じではありませんが、単純な場合はポインタを配列として扱うことができます。ここをクリックしてください:http://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/ –
私はポインタと配列が本当に同じものではないことを知っています。私は知りたいのですが、C-stringの意味でそれらの間に違いがあります – FrozenHeart
C-stringは、そうでない場合はnull terminated stringとして知られて0バイトで終了された文字のシリーズです。配列(char[]
)または最初の文字(char *
)へのポインタとしてアクセスできます。
C++には、std::string
という別の種類の文字列があり、0バイトで終了する必要はありません。 C-stringという用語は、C++プログラマがstd::string
型ではなくヌル終了文字列を意味する場合によく使用されます。
標準(C11§7.1.1)によれば、ストリングはによって終了文字の連続した配列であり、最初のヌル文字、'\0'
によって終了文字のすなわちアレイを含みます。
- 1. C# - ストリング
- 2. Cストリングの問題
- 3. プログラムでccで取得します。この例では、インターフェイス定義
- 4. C++の再定義
- 5. マクロCでの再定義とC++
- 6. エラー:クラスの再定義やC++でクラスの以前の定義
- 7. C-ストリングの検索と置換
- 8. C++のoperator - >()の定義
- 9. C++のコンストラクタ/デストラクタの定義
- 10. C++の未定義のコンストラクタ
- 11. C++で定義された関数への未定義参照?
- 12. のJavaストリングは、特定の文字
- 13. C++での基本型の再定義
- 14. プリプロセッサVS2010でのC++の定義
- 15. 未定義の参照()Cで、のmath.h
- 16. C++クラス定義
- 17. Objective-C - 未定義のシンボル
- 18. 再定義C++ Builderの10.1
- 19. SOAPサービスメソッドのクラス定義C#
- 20. C++複数の定義[エラー]
- 21. 複数の定義C++
- 22. C++ 11ユーザー定義のリテラル
- 23. C#プロトコルアナライザの構造定義
- 24. プラットフォームCプリプロセッサの定義
- 25. C++型キャストの定義
- 26. 未定義の参照(C)
- 27. Objective-Cマクロの再定義
- 28. C#、ユーザー定義の式
- 29. Cの構造体定義
- 30. C++関数の再定義
+1これは理解する上で重要な問題であり、実際には何を意味するのか気になる人はほとんどいません。 –