文字コード

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イズミ 

文字コード

#1

投稿記事 by イズミ  » 14年前

今勉強している「明解C言語 中級偏」という本でわからないことがあったので質問させていただきます。

本のサンプルコードに
#include <ctype.h>
#include <stdio.h>
#include <limits.h>
int main(void)
{
int i;

for(i=0;i<=CHAR_MAX;i++){
switch(i){
case '\a': printf("\\a"); break;
case '\b': printf("\\b"); break;
case '\f': printf("\\f"); break;
case '\n': printf("\\n"); break;
case '\r': printf("\\r"); break;
case '\t': printf("\\t"); break;
case '\v': printf("\\v"); break;
default : printf(" %c",isprint(i) ?i: ' ');
}
printf(" %02x\n",i);
}
return 0;
}


というコードがあり、「char型で表現できるすべての文字とコードを16進数で表示するプログラム」らしいのですが、
int 型の変数iを宣言して、for文でCHAR_MAX(255)までインクリメントしていくというのはわかるのですが、for文の中にあるswitch文の意味がまったくわかりません。
変数iが\aや\bなどになるはずが無いのになぜ、\aや\bが表示されるのでしょうか?
よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字コード

#2

投稿記事 by softya(ソフト屋) » 14年前

それは、制御文字ですね。
http://mikeneko.creator.club.ne.jp/~lab ... ncode.html
0x00~x1fの間にある特殊な意味のある文字コードの事です。

C言語では、エスケープシーケンスで書き表します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 文字コード

#3

投稿記事 by ISLe » 14年前

重箱の隅をつついてすみません。
イズミ  さんが書きました:for文でCHAR_MAX(255)までインクリメントしていくというのはわかるのですが、
CHAR_MAXは255とは限りませんね。
VisualC++は(デフォルトでは)違います。

アバター
ゆーずぃ
記事: 62
登録日時: 14年前
住所: 埼玉県

Re: 文字コード

#4

投稿記事 by ゆーずぃ » 14年前

横からですが、softyaさんの補足をさせて頂きます。
softya(ソフト屋) さんが書きました:それは、制御文字ですね。
http://mikeneko.creator.club.ne.jp/~lab ... ncode.html
0x00~x1fの間にある特殊な意味のある文字コードの事です。

C言語では、エスケープシーケンスで書き表します。
んで、なぜにエスケープシーケンスだけ特別扱いしているのかというと、
例えば'/t'をそのままprintfの%cとして渡すと、エスケープシーケンスとして扱われてしまうからです。
つまりが「/t 0xhoge」として表示させたいのに、「 0xhoge」のように、/tがそのままタブとして機能してしまうのです。
なので、通常の文字はそのまま印刷し、エスケープシーケンスが出たら手動で'//'(これもエスケープシーケンスで、/を表示させるもの)
を先に入れてやり、その後にそれぞれの文字を追加することによって"/t"という文字列を作り出しているのです。

的外れだったら申し訳ない。

イズミ

Re: 文字コード

#5

投稿記事 by イズミ » 14年前

皆さん回答ありがとうございました。

自分のC言語の実力もまだまだだということがわかりました。
これからもこのサイトにはちょくちょくお世話になると思いますが、そのときはまたよろしくお願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る