• ベストアンサー

文字列

文字列を勉強していて思ったのですが %sと%cの違いはなんなのでしょうか?? アスキーコードで表示するときは%cとかそういうことなんでしょうか? 初歩的な質問で申し訳ありませんが、わかる方教えていただきたいです。 よろしくお願いします。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

うむうむ。printf関数での話やね? %sというのは、引数をアドレスと仮定し、そのアドレスから「バイト単位で」値を全部舐めていき0が出たところで打ち切るというものやね。この「0」は、C言語のソースファイルに記述する形式で表現すると'\0'だ。 %cというのは、引数を1バイト(1オクテットではない)の固定データと仮定し、その値を1文字として表示する。何の値で何を表示するかはマシンによる。日本では九分九厘ASCIIかEBCDIC。ASCIIで32という値だと半角スペースだね。1オクテットではない、と言ったのは、1バイトが9ビットである場合もあるからだ(日本人はまずお目にかからないでしょうが)。 int main(int argc, char** argv) { char c = 'C'; char* s = "String"; printf("char = %c\n", c); printf("string = %s\n", s); printf("char in string = %c\n", *s); printf("string = %s\n", (int)c); /* とんでもないことになる */ char* ss = s; while(*ss++) { printf("char in string = %c\n", *ss); } return 0; } 頭ん中だけで全然試してないので勉強のために動きを見てみてほしい。実際動かす時はとんでもの行はコメントアウトしておくこと。

house-i
質問者

お礼

回答ありがとうございますm(__)mせっかくプログラム書いて頂いたのですが、家では実行できないので、明日学校でやってみたいと思います。

その他の回答 (3)

回答No.4

暫く見学してたけど訂正が入らないようなので ASCIIで' '(半角空白)は0x20,数値じゃなくて数字の'0'~'9'は0x30~0x39 また、charは処理系の文字1バイトで符号も処理系依存、 int,floatの精度も処理系に依存という定義だったような・・・。 あえて大きさを意識する必要は通常無いかと・・・。 型の大きさを意識するときはsizeofなどで大きさを求めたり、limits.h等のヘッダ情報を 参照してそこでdefine定義されているもの(char型のビット数はCHAR_BITとか)を使うとばかり 思っていたのですが最近は違うのかな。なんせ処理系依存が多いのがC言語なので。 処理系によってcharの大きさも7,8,9バイトの場合もあるみたいですね。 K&Rで学んだのでやっぱり古いのかな

house-i
質問者

お礼

回答ありがとうございます!うーむ、よくわからない(笑)わかることができるようにもっと勉強しますm(__)m

  • herbest
  • ベストアンサー率42% (15/35)
回答No.2

printf()の話だと思いますが、それは出力フォーマットです。 %cはchar型の文字を1文字出力、%sはchar型配列の文字列を出力します。 文字と文字列ですね。 表示したい変数の型にあわせて変えます。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec05.html
house-i
質問者

お礼

回答ありがとうございます!data[10]みたいなときは%Sを使うということですか?なんとなくわかった気がします(笑)

noname#39970
noname#39970
回答No.1

%sは 文字列を表示する %cは 文字を表示する 文字列っていうのは指定した変数がアドレス(要するにポインタ)として見てNULL(\0)が出てくるまでのもの 文字って言うのは指定した変数の値を文字コードとして扱い、出力する。配列を渡しても先頭アドレスが渡る。そのアドレス値を文字コードとして…だった筈

house-i
質問者

お礼

回答ありがとうございます!

関連するQ&A