• ベストアンサー

char型と言うものがまだ理解出来ません。

まだC++を初めて間もないものですが、char型が今一理解出来ずに困っております。何方か詳しく教えて下さい。 たとえば、 unsigned char c[3] = {'A', 'B', 'C'}; unsigned char chr; chr = c[1]; とした時に、chrは204 'フ'と言うような答えとなってしまいます。素人目から見ると65 'A' と言うような答えしか予想がつきません。とにかくどういうものなのかがよく理解出来ず、参考書をみても0~255(符号無,英数字1文字),-128~127(符号有,英数字1文字)と書いてり、どのような使い方をするのかの詳細がなく困っております。詳しくご説明頂ける方よろしくお願い致します。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>chrは204 'フ'と言うような答えとなってしまいます。 OSは? コンパイラは? 確認の方法は? ちなみにMicrosoftのコンパイラは、デバッグモードでコンパイルすると確保されたばかりのメモリを240(半角のフ)で初期化します。 なので、tamajunさんの確認方法に誤りがあるのでしょう。 >素人目から見ると65 'A' と言うような答えしか予想がつきません。 これは違いますね。Cの添え字は0からです。なので、66'B'になるはずです。

tamajun
質問者

お礼

ご回答ありがとうございます。ご指摘の通り記入ミスで、添え字が0の時でした。OSはWin2k pro,VC++,ブレークポイント設定にてchr = c[0]; の上で止めて結果を見ております。なるほど私の確認方法に誤りがあったのですね、すいませんでした。

その他の回答 (3)

  • pon_kotu
  • ベストアンサー率21% (8/38)
回答No.3

#include <stdio.h> int main(){ unsigned char uc[3] = {'A','B','C'}; char c[3] = {'A','B','C'}; printf ("uc[0]: char %c int %d, c[0]:char %c int %d\n", uc[0], uc[0], c[0], c[0]); printf ("uc[1]: char %c int %d, c[1]:char %c int %d\n", uc[0], uc[0], c[0], c[0]); return 0; } なかんじなものを実行してみてください 配列は、0がスタートなんで あなたがかかれたものを実行して %c でprintfすれば Bが表示されると思います。(%dは符号付十進数表示) もし、printfのときに%sとしているようでしたら、それは文字列に対するもので、文字列はchar配列(配列じゃなくてもいいんだけど)の最後に\0という文字が入っていないとうまく出力されません。str に対して %sはつかえないということです。(変な文字が移る可能性大です) ということで、がんばってください

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

204にはならないと思います。 'B',66だと思うのですが、 どのように確認されて、204 'フ'になったのですか?

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

・・・ unsigned char c[3] = {'A', 'B', 'C'}; unsigned char chr; chr = c[1]; printf("%c\n", chr); とやると、結果は B となるけど?

関連するQ&A

  • C言語でcharの足し算

    char型の配列の中から数を取り出して足し算させたいです。 この配列には数字だけではなく英数字のどちらかが入るので、intではなくchar型の配列を作りました。 scanf("%c", &i); と、scan文をループさせてchar i[3]の中身を{1,1,a}と入れたとします。 このとき、i[0]+i[1]とやると、中の文字コード(?)を足してしまって98という結果が出てきてしまいます。 かといって、 scan("%d", &i);とやると、数字を入れているときはいいのですが英字を入れると「フ」という文字になってしまいます。 上手い具合に数字はコードじゃなく数字として、英字は英字のまま1つの配列の中に入れられないものでしょうか。 宜しくお願いします。

  • unsigned char の配列で途中で0を含む時のstrlen

    表題のようにunsigned char a[10]; の配列で、文字列ではなくデータとして扱っている時、どうしても途中で0が混じります。そこでstrlen(a) を取ると途中までの長さの値しか取れません。 sizeof(a) としてもunsigned char のsize=4 になるだけです。 この回避策はあるでしょうか。

  • charでの計算?

    就活で筆記試験がありました(C言語)。 問題は良く覚えていないのですが、char型で計算?をしていて、その答えを書けというものでした。 はっきり言ってまったく分かりませんでした。 char型は文字を入れるものと思っていたからです。 int型じゃなくchar型で計算などできるのでしょうか? できるんなら例を挙げて解き方を教えてください。 めんどくさいでしょうがよろしくお願いします<(_ _)>

  • char型変数

    のことで質問があります。 ユニコード文字一文字ということなんですけれども、 たとえば char c = "a"; これはコンパイルエラーになりますよね。 文字列は入れられない。もっともです。 あるテキストの練習問題で、コンパイルエラーになるものはどれですかというのがあって、 char c = 4096; というのがあり、これはエラーだ!、と思ったら、 コンパイルは通りました・・・ ちなみにcの内容を表示してみたら ? と出ました。 これはどういうことですか?? なぜエラーとならないのですか?

    • ベストアンサー
    • Java
  • SJISのCHAR(8)に入れられる文字数について

    SJISのCHAR(8)に入れられる文字数について MySQLのver 5.0にて、文字コードをSJISにして、カラムをCHAR(8)で設定した場合、 英数字1バイト文字の場合、16文字まで入れられるのでしょうか? それとも、単純に文字数で弾かれるのでしょうか? 現在、ver 4.0.24(文字コードは全部Cでいうところのchar1バイトで扱う)から、ver 5.0台に移行を考えており、移行するとした場合、PHPなどのプログラムをどの程度変更しなければならないかを考えています。 たとえば、CHAR(8)のカラムへデータを入れる場合、PHPで if( strlen($hoge) <= 16 ){ $hogeをCHAR(8)のカラムへINSERT処理 } とすると、$hogeが英数字だった場合、16文字まで、INSERT文にかかってしまうのですが、これで問題なく16字までINSERT出来るのかどうか知りたいのです。 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • char型をint型に変換

    char型の文字が例えば char a = '3' char b = '5' となっている時、int型としてa+b、つまり答えが8となり、さらにそれをchar型として別の変数に保存するにはどのような方法がありますか? 質問の意味がわかりづらかったらなんなりと質問して下さい。 初歩な事とは思いますがどうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • unsigned char SJis[2]からstd::stringに変換

    開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

  • 私は現在、職業訓練校にて勉強し始めた初心者です。

    私は現在、職業訓練校にて勉強し始めた初心者です。 C言語の ”char型”の使い分けが解からなく困っております。 本では char型 0~255 又は -127~127 signed char型 -127~127 unsigned char型 0~255 となっており、具体的には”char型”はどう使い分けるのか解かりません。 又、符号付と符号無し以外に存在する意味が解かりません。 どうぞ宜しく御願い致します。

  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • char形のポインタの内容は(基本情報16年午後第6問に関して)

    こんにちは。 基本情報技術者の16年秋午後6問に 次の記述がありました。 void URLEncode(unsigned char *input ,unsigned char *output){ const unsigned chars[]="0123456789ABCDEF"; (省略) *output++=chars[*input>>]; *output++=chars[*input&0x0f]: このような記述ですが、 *inputは文字のはずです。 そのまま数字(文字コード)かのように、 ビット演算できるのでしょうか。 キャストか、文字コードに変換する 作業が必要になりませんか。 C言語は詳しくありません(JAVA選択です)。 それでも、少し気になりましたので、 何かアドバイスできる人がいましたら、 よろしくお願いします。