Linuxって wsprintf 使えないぞ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGLinux(RedHat 6.2) でコンパイルしたところ
wprintf
swprintf
が使えない。
man で見てみるとちゃんと
wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - ワイド文字をフォーマットして出力する
書式
#include <stdio.h>
#include <wchar.h>
int wprintf (const wchar_t* format, ...);
int fwprintf (FILE* stream, const wchar_t* format, ...);
int swprintf (wchar_t* wcs, size_t maxlen,
const wchar_t* format, ...);
って書いてあるのに。
何故?
ANSI 関数じゃないの?
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGLinux を叩きをしたいのでしょうか?
自分の馬鹿を晒したいのでしょうか?
すれ立てるまでもない質問スレに誘導してほしいのでしょうか?
00041
NGNG関係ないことは書かないでください
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGsprintfがANSIです。
wsprintfはWin16でプログラムが大きくなりすぎて、
リンクエラーおこしたときに差し替えるためのsprintfの小型サブセット版です。
同じようなものとして、strcpyに対するlstrcpyとかあります。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGそもそも>>1のスレタイトルが間違ってるんだから仕方が無い。
0010デフォルトの名無しさん
NGNGwsprintf が Windows の user32.lib に入っている関数で、
swprintf が Linux でも使える ANSI 関数ですね。
0011デフォルトの名無しさん
NGNG>>1よ。いいもの見せてくれてありがとう。
そして、永遠にさようなら。
0012デフォルトの名無しさん
NGNG***すれ立てるまでもない質問はここで 第5刷***
http://piza2.2ch.net/test/read.cgi/tech/1001998049/
0013デフォルトの名無しさん
NGNG0014
NGNGゴルゴ13に吉野屋の話をされてしまうぞ>>1
00161
NGNGスレタイトルまちがえました。すんません。
それはともかくとしてやっぱりLinuxでswprintf使えない。
そのことに関しては誰も知らないのかな?
stdio.h とか wchar.h とか、ヘッダー片っ端から探したけど入ってない。
とうぜんリンクもエラーになる。
manには書いてあるのに何故? 嘘ついてるわけ?
あって当然だとおもうし、どうしたら使えるようになるんでしょうか?
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG>manには書いてあるのに何故? 嘘ついてるわけ?
自分の無知を人のせいにするな
C99からの追加部分を利用出来るようにすればいいだけ
一行追加するだけなんだから、そのくらいは自分で調べろ
00191
NGNG一行追加って具体的にどうするんですか?
C99関連って検索してもそれらしい事見つからないけど。
ちなみにRedHat6.2日本語版で
/usr/include/
のヘッダ全部grepしたけどswprintfって見当たらないみたいです。
どこのHP検索しても
<stdio.h>
<wchar.h>
をインクルードすれば普通に使えるようにしか書かれてないようですが。
0020デフォルトの名無しさん
NGNGそれでは、コンパイラ名とバージョン、コンパイラをどのようにインストールしたか、教えてください。
00211
NGNGデフォルト設定でインストールしたものです。
Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0smp on a 2-processor i686
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG00241
NGNG誰も実際にLinuxに触ったこと無いと思われる。
いいかげんなこと言わないで欲しい。
結局何にも答えてくれないので自己レス。
とりあえず別のLinux7.1サーバーにソース持っていって
コンパイルしたら swprintf は通りました。
結局Linux 6.2 じゃ対応してないのね。
しかし、また新たな問題が。
int main()
{
wchar_t test[]={ L"漢字"};
wprintf(L"%d %d\n", sizeof(wchar_t), sizeof(test));
wprintf(L"%d\n", wcslen(test));
return 0;
}
この結果が
4 20
4
どーゆー事?
wchar_t が2バイト or 4バイトになるというのはわかるけど
なんで20バイトも?
しかも文字列の長さ4って・・・・
gdb でデバッグしてみると
char1文字1文字 を unsigned int に突っ込んだだけに見えます。
漢字の上位バイトと下位バイトが別々に格納されてる・・・
なんかめちゃくちゃな作りになってると思うのは私だけですか?
0025デフォルトの名無しさん
NGNG1文字4バイト?で合計 20バイト、ということなのでしょうか。
それより、日本語文字を認識してくれているのか気になります。
0026デフォルトの名無しさん
NGNGということなんじゃないの?
日本語なんか認識しないでしょ、ふつー。
0027デフォルトの名無しさん
NGNG偉そうだな。
誰も知らないよ。
どっか逝けっつ〜の。
0028デフォルトの名無しさん
NGNGglibc のバージョンとか gcc のコンパイル方法 (configure 時に --enable-c-mbchar
つけてるか)などの細かい点に依存しそうなので、ここよりも Linux 板か、同じディス
トリビューションを利用している人間が集まるめーリングリストで聞いた方が良いと思
う。
0029デフォルトの名無しさん
NGNG教えてください
ヘッダーを見る限り、無理なようなきもするのですが
使えるなら、使いたいです
よろしくお願いします
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGめちゃくちゃなのはお前の方。どんな環境で動かしても同じような
結果になる。まず、国際化プログラミング関係の本をちゃんと読み、
ワイドキャラクタやlocaleについて勉強しろ。
ISO C localeモデルに従ってプログラミングするには、まずsetlocaleを
呼び出してlocaleを設定しなければならない。特別なことをしないの
なら、setlocale(LC_ALL, "")を最初に呼び出し現在のlocaleで動作
するようにする。setlocaleを呼ばなければC localeで動作するので
日本語は当然認識されない。
--enable-c-mbchar付けてコンパイルしたgccならワイド文字列定数を
コンパイル時のlocaleに従って処理してくれるので、mainの直後に
setlocale(LC_ALL, "")を付け加え、日本語localeでコンパイルし実行
すれば期待通りの動作をするはず。
でも--enable-c-mbcharってバグっているっぽい、っていうかかなり
逝ってよしな仕様。ちゃんと国際化しないとだめじゃん。まあ、国際化
の作法に従うなら、C localeで扱えない文字をソースに埋め込まず、
catgetやgettextを使用するようにしないといかんのだが。
0032デフォルトの名無しさん
NGNGLinux使ってるけど、 printf("漢字"); で漢字が出るからいいん
じゃない?
なんでOSや言語に任せればいいことでそんなにムキになんの?
0033低速たん
NGNG日本語しか興味ない人でも、wide character使わないと
とりあえず文字境界探すのが面倒よ。
というかむしろ言語にまかせようよ、という話をしていると
思われ。
0034デフォルトの名無しさん
NGNG頑張ってすべてL10Nしてくれ。
0035OCALIZATIO
NGNGたまには書いてくれ…
0036デフォルトの名無しさん
NGNG0037NTERNATIONALIZATIO
NGNG俺はもうあきらめたよ!
0038デフォルトの名無しさん
NGNG> 日本語localeでコンパイルし実行すれば期待通りの動作をするはず。
つーか、すでに期待通りに動いているというか、
期待通りに動く事はないというか…
wchar_tの内部表現を変えたいなら、自分でcompilerを書いてくれないと。
そこに目をつぶれば、すでに期待通り。(setlocale()はANSI的に必要だが)
ところで、普段メッセージ・カタログ使っているから、L"漢字"知らないんだけど、
> wchar test[]={L"漢字"};
これはこれでいいものなの?
< wchar test[]=L"漢字";
ではなく。gccはerrorにならなくて、後者のように前者をcompileしてるけど。
そうは思えないんだけどねー。
0039デフォルトの名無しさん
NGNG>結果になる。まず、国際化プログラミング関係の本をちゃんと読み、
>ワイドキャラクタやlocaleについて勉強しろ。
マジ教えて〜。お勧めの国際化プログラミングの本は?
0040デフォルトの名無しさん
NGNGJISから出ている規格書。JISは国際化だけC言語と別の冊子になっている。
004139
NGNGとりあえず共立の方を探してみます。
0042ULTILINGUALIZATIO
NGNG同志よ!
0043デフォルトの名無しさん
NGNG同士よ!
0044デフォルトの名無しさん
NGNGだいぶ格調が下がったな。。。
0045デフォルトの名無しさん
NGNGとレスを全く読まずに書いてみる。
多分予想通りの展開だと思うが。
■ このスレッドは過去ログ倉庫に格納されています