プロが教える店舗&オフィスのセキュリティ対策術

超初心者です。いろいろと調べてみましたが、どうもしっくりこないので、なんとなく聞いてみたいのですが、Char型とString型の違いってなんなのでしょうか???
二つとも使ったりするのですが、あまり詳しいことはわからずに使ったりしています(参考書どおりにやったりするので・・・。)。それぞれのメリット、デメリットが知りたいです。っていうか、そもそも比較するものでもないのでしょうか?本当に暇なときでいいです。よければ、参考になるURL等を教えていただけるだけでも結構です。お願いします。

A 回答 (3件)

C/C++には、Char型やString型というのは、少なくとも標準の範囲では存在しません。


使用されているライブラリを特定してください。

もしかしてchar型とstd::string型のことでしょうか?

この回答への補足

>もしかしてchar型とstd::string型のことでしょうか?
断言はできませんがそうだと思います。ヘッダファイルの後に、
using namespace std;
と、書いています。Stringに関しては、初心者用の参考書のため、文字を扱うものです。程度の説明しかないのです。Charも文字を扱うんじゃないの?っていう単純な疑問なんですが・・・・。申し訳ありません・・。

補足日時:2005/04/21 18:21
    • good
    • 0

>もしかしてchar型とstd::string型のことでしょうか?


断言はできませんがそうだと思います。ヘッダファイルの後に、

そうだという前提で回答します。

char型は1文字だけ格納するために使うのに対して、std::string型は文字列、例えば"Hello, World"といった複数の文字からなる並びを格納するためのクラスです。(厳密にはstd::basic_string<char>のtypedef名です)
    • good
    • 0

私が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型については、不勉強で申し訳ありませんが、普段利用していないため、回答を避けさせていただきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!