最近VCを勉強しはじめました初心者です。
WSPRINTF関数とPRINTF関数の定義をMSDNなどを使い見たのですが、
実際に使用しようとすると書き方が解りません。
また、違いも解りません。
ただ、二つの関数は違うってことは理解してます。
何故って聞かれると困ってしまう具合です。
参考になるような事はないでしょうか??
アドバイスください。
C言語としての基礎知識はありますか?
>PRINTF関数の定義をMSDNなどを使い見たのですが、
>実際に使用しようとすると書き方が解りません。
基礎知識があれば最低限「PRINTF」の書き方が解りません。
なんて質問は出ないはずですけど?
実際どちらを使いたくて質問してますか?
>基礎知識があれば最低限「PRINTF」の書き方が解りません。
>なんて質問は出ないはずですけど?
printf()の書き方が解りません、という訊き方ならアリ?
# C言語では大文字・小文字は区別されるんだという意味です>質問者
printf(), sprintf(), wprintf(), swprintf(), wsprintf()などいろいろあって、全て
「printf()の仲間」と捉えていいです。機能の違いを「s」とか「w」とか「sw」とか
「ws」といった接頭辞をつけて区別している、と考えてください。つまり、接頭辞を見れ
ば「どういうときに使うprintf()か」ということが解る、ということです。他にも「f」
とか「v」とかが九十九のもありますが、質問文では触れられていないので割愛します。
さて、printf()の接頭辞から機能を見分けるポイントは、おおまかにこんな所です。
「結果がどこに出力されるのか」
標準出力に出したいのか、文字列領域に格納したいのか、ということです。
「どういう文字を扱うのか」
タダの文字(語弊があるな)を使うのか、ワイド文字を使いたいのか、それともUNICODEを
使うのか、ということです。
この辺に注意してもう一度MSDNを熟読してみてください。
微細修正。
誤:他にも「f」とか「v」とかが九十九のもありますが
正:他にも「f」とか「v」とかがつくものもありますが
すいません、最近誤変換が目立つtibでした。
おそらく、手持ちの入門書とかを見た方が速いかと。なかったら、
インターネットのキーワードで printf と入力すればサンプルコードが
いっぱい出てきます。プログラム関係のキーワードだったらほとんど
ヒットしますしね。まぁとりあえずヒントを書いておきましょう。
char *pName = 今日の日付:;
int m = 1;
int d = 18;
// 基本的に % の文字を後の引数の値で置き換えます。
// %s は文字列で、 %d は整数型で置換します。
printf ( %s %d月 %d日\n, pName , m, d);
/* 結果は
>> 今日の日付: 1月 18日
*/
# 確かに MSDN にのっているヘルプだとわかりにくいですね(^^ゞ
# 僕も昔悩みました。wsprintfの方のヘルプの方が書式フィールドが
# まとまっているので見やすいのではないかと思います。
tib さん、間違ったことを教えちゃいけません
VC では
wsprintf など w で始まる printf() 函数群は Windows の API のことがあります
w をとった C の標準函数に対応するものですね
Windows の API の方は浮動小数点数が扱えない点と出力先のバッファーが 1024 バイト
以内である点が一番目立つ違いでしょう
ただ、wprintf() は C/C++ の標準函数ですから先頭が w で始まるかどうかだけでは判断でき
ません
>tib さん、間違ったことを教えちゃいけません
んー、間違ったというか言葉が足りなかったというか...。なんにせよ、補足ありがとう
ございます。
みなさんありがとうございます。
tibさんが言ってる。
printfの先頭字で区別してるとあるのですが。
printf()とwsprintf()の機能の違いはなんでしょうか?
「ws」の場合と何もついてないprintfではどんな違いなのか知りたいです。
くだらない質問してるかと思いますが、本当にわからなくて困ってます。
こんな事分からないならやっぱ向いてないのでしょうかねぇ~。
ぜひ返事ください。
一言で言えば、バッファに格納するのか、標準出力ストリームに出力するのかの違い。
以下、MSDNよりコピペ
int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...);
int printf(const char *format [, argument]... );
>ただ、二つの関数は違うってことは理解してます。
どの程度の理解度なのか不明瞭だったんですが?
書き方が違う程度で機能的違いや使用目的の違いがわからないと言うご質問のようです
ね!
MSDN「printf」の解説より
>wprintf 関数は、printf 関数のワイド文字バージョンであり、format はワイド文字
列です。
>wprintf 関数と printf 関数は、それ以外の動作は同じです。
MSDN「ワイド文字」キーワード検索すると
>マルチバイト文字は、1 バイト以上の文字です。
>それぞれのバイト シーケンスは、拡張文字セットのうちの 1 文字を表します。
>マルチバイト文字は、漢字などの文字セットで使います。
>ワイド文字は、多言語で使われる文字コードで、つねに 16 ビット長です。
>文字定数は char 型ですが、ワイド文字は wchar_t 型になります。
>ワイド文字は固定長なので、アルファベット以外の文字セットを使う国際化された
>プログラミングが単純になります。
>ワイド文字のリテラル文字列 Lhello は wchar_t 型の 6 つの整数の配列になりま
す。
こんな解説ありました
この質問は、VC++ラウンジで扱う内容なのですか?
みんながあれこれ説明するよりも、Cの本を片手に
実際にやってみたほうがはるかに早く上達できるのではないでしょうか?
冷たい言い方かもしれませんが、
現時点でプログラムに向いている向いていないということを
考えている暇があったら、参考書を買って読んで
実際にやってみましょう。
習うより慣れろということです。
いい参考書が無いです。
なにかありますか??
VC で Windows 上で動作するプログラムを書く場合は wsprintf は Windows API 版の
sprintf です
(この場合、wsprintf のWは Windwos のWで、wchar_t や WCHAR やのWではありません)
printf と sprintf との違いはわかりますね
>いい参考書が無いです。
>なにかありますか??
このスレッドとしては、あまり適切発言とは思えませんけど
回答者の返事は、まったく参考にならないと言うことですかね?
「printf」論議について必要無くなっちゃいましたかね?
>参考書
に期待するものは何でしょうかね?
言語基礎、Windowsプログラミング、C++、利用目的別関数の選択方法
今回のprintfに着目を限定するならMSDNだけでも十分参考
になると思いますが?
ご自身どんな、参考書持ってますか明示して見てはどうでしょうか
その本を基準にもっと簡単なものを期待するのか、分厚くかなり高価で
難しい内容のものを期待するのか?
なにはともあれ、あなたのプログラミング目的は何なのでしょう?
このスレッドも話、タイトルから外れてますから、黙殺してもらっても
結構です
話しずれてすみませんでした。
知りだしたらあれもこれもって雰囲気になってしまい、
このへんでやめます。
printf と sprintfの違いは勉強しました。
本当にありがとうございました