[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00782] Re: ビットシフトに関して



はじめまして。松本です。

# たかひろさんは混乱しているようですし、(同じことの繰り返し
# になるので)これ以上フォローがないかもしれませんから
# ちょっとだけコメントします。

> >普通はこんな感じのコードになりますかね.
> >char str[16] ;
> >sprintf(str, "%d", n) ;
> >text_put_string(x, y, str) ;

> そう!!そいうふうにやった。
> う〜ん、自分がタコっている部分は、別のところっすね〜。

長久さんやこむらさんが指摘されているように
おかしいのは、text_put_stringの使い方そのものです。
# nearやfar以前の問題だと思います。

text_put_stringに渡すのはポインタであって、それ以外のデータを渡しても
意味をなしません。
(C++Builder等のVCLなどでは整数値を渡しても自動的に変換してくれたり
 するものもありますが、text_put_stringはそうではありません)

どうしても整数値をtext_put_stringに渡したいのであれば、上のサンプルのように
sprintf(str, "%d", n)などとする必要があります。

※「表示したい文字列が入っているメモリの先頭のアドレス」を渡すんです。
  整数を渡したら、無理矢理アドレスとして解釈してしまいますよ。

> でも、sprintf()で、「sprintf(str, "%d", n) ;」のように使われていますが、
> printf()では printf("%d\n", str);
> だと思うのですが、ちょっと関数の引数の並びがちょっと違うんでしょうか?

sprintfについてちょっと調べればわかるとは思いますが、"%d"より後ろの値を
""内の指示に従ってstrに書き込むのです。
「%d」はわかりますか?上の場合、例えばn=12ならstrの中身は '1' '2' '\0'の
3つになります。

printfは標準出力への書き出しをすることになっているので、sprintfの場合の最初
の引数が
必要ない(書いてはいけない)だけで、順番がおかしいわけではありません。

> text_put_string(x, y, &str);
> ってな感じで、キャラクター変数を渡す場合は、アドレスを渡すんですね?

「C++から」とのことですが、ポインタのあたりは理解されていますか?
WWの関数リファレンスをみればわかる程度にはCを習得されることをお勧めします。

では、がんばってください。
--
Matsumoto.




ML Archives