• ベストアンサー

Char型とString型

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

>もしかしてchar型とstd::string型のことでしょうか? 断言はできませんがそうだと思います。ヘッダファイルの後に、 そうだという前提で回答します。 char型は1文字だけ格納するために使うのに対して、std::string型は文字列、例えば"Hello, World"といった複数の文字からなる並びを格納するためのクラスです。(厳密にはstd::basic_string<char>のtypedef名です)

その他の回答 (2)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.3

私が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)
回答No.1

C/C++には、Char型やString型というのは、少なくとも標準の範囲では存在しません。 使用されているライブラリを特定してください。 もしかしてchar型とstd::string型のことでしょうか?

chihiro5203
質問者

補足

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

関連するQ&A

  • String型からChar配列への変換は可能?

    String型から例えばcharの配列に変換するという事はできるでしょうか String str="OKwave"だとすると char c[]={'O','K','w','a'.'v','e'}; というような感じにしたいのですが、流石に不可能でしょうか。 もし出来ないなら、代替方法とか教えていただけるとありがたいです。 とりあえず、文字を一つ一つに分けたいのです・・・ Javaはまだ初心者で、質問内容も初歩的なものだと思いますが、よろしくおねがいします。

    • ベストアンサー
    • Java
  • String型とchar型の変換エラーです

    今晩は!またまたこの掲示板にきました。よろしくお願いします。 文字列かブランクを取り出すコードを書きましたが、 -------- char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { --------- のところでString型とchar型の混合は受け入れられませんのようなエラーが出ました。 if(ch_check ==" "をboolean型でうけるのも拒否されました。 どこをどのようにしてやればよいでしょうか。 JAVA初心者です、特に文字列の取り扱いは評判通りわかり難くくないています。 よろしくお願いします。 ---------- public class Mojiretu_Blank { public static void main(String[] args) { String str = "This is a pen."; int i = 1 ; int blank_count = 0 ; while( i < (str.length()+1) ) { char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { blank_count ++ ; System.out.println(ch_check); } else{} System.out.print("ブランクの数は" + blank_count + "個です。"); } } }

    • ベストアンサー
    • Java
  • System::Stringからconst charへの変換

    aという変数がSystem::String型であります。 そこで次に行いたい処理のために、const char*に変換したいのですが、下記のページを参考にプログラムしてみたのですがうまくいきませんでした。 うまくいかなかったというのはまだSystem::String型のままで変換できていなかったとエラーで出てしまいます。 そのような場合は、どのように型変換すればよいのでしょうか?

  • C#で char型とstring型の比較で Equalsでハマりました。 

    C#で char型は値型でstring型は参照型ですがこの比較を正しく行うにはどうしたらよいでしょうか? string s = "0123456789"; Console.WriteLine(s[0]); Console.WriteLine("0".Equals(s[0]) ? "true" : "false"); で、falseなのは驚きでした。 Equalsを鵜呑みにしていました。 コンパイルできたので今まで気づきませんでした。 詳しい方、教えて頂けますか?

  • C++ String クラスについて

    こんにちわ。 C++のStringクラスについて質問です。 #include <iostream.h> #include <string.h> struct DATA { string word; int *count; }; ↑の様な形でストリング型のwordを定義したいのですが、うまくいきません・・・ 私は Microsoft Visual C++ 6.0 を使っています。 コンパイラによって、上の様な定義ができなかったりするのでしょうか? char word[10]; の様にしたほうがいいのでしょうか? string word; と char word[10]; では、後々どのような違いが生じてくるでしょうか? つまらない質問ですみません。よろしくおねがいします。

  • String型を3つで比較したい!

    String型を3つで比較したい! Compare関数は2つしか比較出来ません。 3つだとSelect文を2重に書くしか方法はないのですか? 参考サイト: http://jeanne.wankuma.com/tips/vb.net/string/compare.html ちなみに、やりたいことは電卓で、.が複数回呼ばれたとき1つだけにしたいのです。 本当は、 If Stirng型今回 = Stirng型前回 = "." Else  処理したい内容 End If です。

  • CHAR型ポインタについて。

    CHAR型ポインタについて。 当方C言語初心者です。 ポインタと文字列の関係分からないことが出てきました。 参考にしている本があり、そのページに下記のソースで「const char *pc1」のポインタ変数を用意して、そこに直接文字列を代入しています。 本来、「char *pc1」はchar型のアドレスを格納するための変数のはずなのに、その変数に文字列を代入してることに疑問を感じました。 この記述の仕方は間違っていないのでしょうか?また、アドレスを格納するための変数「*pc1」に「abcdefg」の文字列はどのようにメモリ上で格納されているのでしょうか? 知ってどうなるの?みたいな質問かもしれませんが、ご教授いただけると幸いです。 #include <stdlib.h> #include <string.h> void func(void) { const char *pc1 = "abcdefg"; //←ココ char *pc2 = (char *)malloc( strlen(pc1) +1); if ( pc2 ) { strcpy( pc2, pc1 ); free( pc2 ); } }

  • QUERY_STRINGについて

    QUERY_STRINGについてご教授下さい。 例1:http://~/?abc 例2:http://~/abc 通常QUERY_STRINGではURLの?より後ろ部分、 例1ではabcを取得する際に使用するかと思いますが、 今回、この?を無しに例1同様に例2のURLを用いabcの取得をしたいと考えています。 参考URL(下記)のサイトについては私の考えている処理を行っているようです。 よろしくお願い致します。 参考URL: http://phot2.com/press.htm

    • ベストアンサー
    • PHP
  • String型の日付(2005/11/25)の比較

    Java初心者です。String型で2005/11/25 のように2つString型で日付を取得したときに、大小の比較をしたいのです。どういう方法が考えられますか?よろしくお願いします。

    • ベストアンサー
    • Java
  • String^の^自体が何を意味しているのか、わかりません。

    String^ msg = "テスト"; は、 char msg[] = "テスト"; と同じ意味でしょうか? String^の^自体が何を意味しているのか、わかりません。 TurboCからC言語は殆ど使っていませんので、戸惑っています。 VS2005を覚えようとしているのですが、なかなか取っ付きにくいです。 意識改革できる参考書などご存知の方も教えてください。

専門家に質問してみよう