C言語わからないことメモその1
わからないことメモなんで華麗にスルー推奨!!!
でも、わかる人は答えていってくれてもいーよwww
◇苦しんで覚えるC言語◇
・苦C14−2
EOS・\0について。
>>文字列の最後に特別な値を記憶しておくことで文字数を判定
とあります。確かにstr[]/*文字列とする*/がここに入力する文字列より大きい場合、\0を置いて文字列の終了を知らせなければなりません。
しかし、たとえば文字列がジャストの場合はどうなんでしょう。
char str[5] = {'M','A','R','I','O'};
printf("%s\n",str);
こういう場合です。が、これを実行すると文字列の最後がわからないため、MARIOのあとにイミフな文字が続いてしまいます。これは何故なんでしょう?
この場合strにはstr[0],str[1],str[2],str[3],str[4]の5つしか存在しないはずで、printf関数で出力したとしても"MARIO"以降の数は表示されないのでは?
・苦C14−2文字列を扱う方法
[4]究極の文字列合成関数
>>sprintf関数は、printf関数と同じ機能を持った関数ですが、
sprintf関数の場合、結果を配列の中に記憶します。
printf関数の様々な機能を自由に取り扱うことが出来るのです。
ここで言われているprintf関数と同じ機能とはどのような機能なのかが不明です。printf関数とは出力を行う関数です。確かに
printf("%s%s%d\n",str1,str2,i);
などとすることによって、str1,str2,iをつなげて出力することが可能でしょう。sprintf関数では
sprintf(str,"%s%s%d\n",str1,str2,i);
こうすると、strに%s%s%d\nが代入されるわけです。これを出力はしません。
ここでは”文字をまとめることができる”ということを指して”同じ機能”と指しているのでしょうか。実は、関数の中身を見ると同じ機能によって成り立っているのでしょうかね。
2008/03/31 19:16 | メモ | COMMENT(0) | TRACKBACK(0) TOP




コメント
コメントの投稿
トラックバック
この記事にトラックバックする(FC2ブログユーザー)