- ベストアンサー
Char型とString型
超初心者です。いろいろと調べてみましたが、どうもしっくりこないので、なんとなく聞いてみたいのですが、Char型とString型の違いってなんなのでしょうか??? 二つとも使ったりするのですが、あまり詳しいことはわからずに使ったりしています(参考書どおりにやったりするので・・・。)。それぞれのメリット、デメリットが知りたいです。っていうか、そもそも比較するものでもないのでしょうか?本当に暇なときでいいです。よければ、参考になるURL等を教えていただけるだけでも結構です。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>もしかしてchar型とstd::string型のことでしょうか? 断言はできませんがそうだと思います。ヘッダファイルの後に、 そうだという前提で回答します。 char型は1文字だけ格納するために使うのに対して、std::string型は文字列、例えば"Hello, World"といった複数の文字からなる並びを格納するためのクラスです。(厳密にはstd::basic_string<char>のtypedef名です)
その他の回答 (2)
- rentahero
- ベストアンサー率53% (182/342)
私がCプログラマなため、C++の知識が少々不足していることを最初にお断りいたします。 Cにおけるchar型というのは、asciiストリング1文字が入るサイズの変数を指します。 すなわち、7ビット以上の1バイトの整数変数のことです。現在主流のパソコンにおいては、8ビット=1バイトなので、符号なし8bitまたは符号付7bitの整数変数です。 このような持って回った言い方をしたのは、過去には9ビット=1バイトのCPUがあったからです。 さて、ご存知のことかと思いますが、char型の変数は上述したように1文字しか入りませんので、文字列を扱いたい場合、char c_string[32]というように配列にして取り扱います。しかし、配列でしかありませんので、文字列の終端がわかりません。このため、文字列の後ろに0を代入し文字終端とします。 利点としては、文字列を単なる配列として利用するため、文字列をスキャンしたりする際にコードが簡単になります。 例:strlenの参考実装(エラー処理は省く) int strlen(char *p) { int cnt=0; while(*p++) cnt++; return cnt; } 弱点としては、配列でしかないため、バッファオーバフローを起こすコードを簡単に書けてしまうことです。 例:sprintfを利用した場合 int foo(void ) { char buf[256]; char *e; e = getenv("PATH"); sprintf(buf, "path=%s\n", e); ...以下略 この例において、環境変数PATHが250バイト以上あったらbufのさいずをオーバーしてメモリを壊してしまう。 C++のstd::String型については、不勉強で申し訳ありませんが、普段利用していないため、回答を避けさせていただきます。
- jacta
- ベストアンサー率26% (845/3158)
C/C++には、Char型やString型というのは、少なくとも標準の範囲では存在しません。 使用されているライブラリを特定してください。 もしかしてchar型とstd::string型のことでしょうか?
補足
>もしかしてchar型とstd::string型のことでしょうか? 断言はできませんがそうだと思います。ヘッダファイルの後に、 using namespace std; と、書いています。Stringに関しては、初心者用の参考書のため、文字を扱うものです。程度の説明しかないのです。Charも文字を扱うんじゃないの?っていう単純な疑問なんですが・・・・。申し訳ありません・・。