(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 163
https://mevius.5ch.net/test/read.cgi/tech/1721137434/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 164
1デフォルトの名無しさん (ワッチョイ 3301-UQbq)
2025/07/23(水) 15:30:01.81ID:eCR5cXRr0168デフォルトの名無しさん (ワッチョイ 259c-L2M8)
2025/11/18(火) 00:20:37.35ID:3HXouIV30 Cで作るの?
169デフォルトの名無しさん (ワッチョイ 5202-F/8Y)
2025/11/18(火) 16:36:11.76ID:d9hs+rsN0 cのcgiだって可能だしあってもいいだろ(?)
170デフォルトの名無しさん (アウアウウー Sa85-H7iN)
2025/11/18(火) 23:45:44.92ID:+AochNn2a windows で
setlocale(LC_ALL, "ja-JP.UTF8"); とか
setlocale(LC_CTYPE, "ja-JP.UTF8"); とか
プログラムの先頭で設定しても無駄?
console は chcp 65001 してる
fopen() のファイル名に UTF8 で渡したいんだが
出来れば readdir() も UTF8 で取得したいのよ
setlocale(LC_ALL, "ja-JP.UTF8"); とか
setlocale(LC_CTYPE, "ja-JP.UTF8"); とか
プログラムの先頭で設定しても無駄?
console は chcp 65001 してる
fopen() のファイル名に UTF8 で渡したいんだが
出来れば readdir() も UTF8 で取得したいのよ
171デフォルトの名無しさん (ワッチョイ 3d5f-JyHE)
2025/11/19(水) 07:24:28.12ID:1qR7LTyn0 ソースコードがSJISなら無駄
172デフォルトの名無しさん (スフッ Sd22-A2v6)
2025/11/19(水) 10:44:13.50ID:sa05/K8dd opendir and readdir themselves work on bytes. They do not perform and reencoding.
Some filesystem drivers may impose contraints on the byte sequences.
I would expect the form returned by readdir to work when passed to opendir.
I'd like to know how you were able to find out that opendir and readdir do not perform any reencoding?
You can trace it through the C library source and the kernel code.
If you run strace ls, you can directly start from the kernel entry point: the open syscall.
The generic filesystem support code passes all bytes other than null and / along unmodified.
It's only some filesystem drivers that transforms file names.
Some filesystem drivers may impose contraints on the byte sequences.
I would expect the form returned by readdir to work when passed to opendir.
I'd like to know how you were able to find out that opendir and readdir do not perform any reencoding?
You can trace it through the C library source and the kernel code.
If you run strace ls, you can directly start from the kernel entry point: the open syscall.
The generic filesystem support code passes all bytes other than null and / along unmodified.
It's only some filesystem drivers that transforms file names.
173はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-o1Ob)
2025/11/19(水) 11:29:22.16ID:MnCaLNwG0 >>170
普通の入出力はテキストモードとバイナリモードがあって、ロケールの設定がテキストモードの振る舞いに影響するんだけど……
Windows の場合はテキストモード・バイナリモード・ユニコードモードに分かれていて _setmode でユニコードモードに設定する必要がある。
しかしユニコードモードの設定はワイド入出力系関数 (wprintf など) にしか影響を及ぼさない。
そんでその辺の設定をしても、入出力の内容に関してであってファイル名を UTF-8 で渡すのはたぶん駄目なはず。 (確認はしてない。 すまぬ。)
ファイル名はワイド文字 (UTF-16) に変換してから _wfopen で開くのが正当な方法だと思う。
Windows に readdir は無いので FindFirstFileW, FindNextFileW を使うのが普通の方法。
だいぶん前に調べたときは msvcrt と ucrt でちょっと振る舞いが違ったような記憶があるのでそこらにも注意が必要。
ucrt は色々と大きく改良されているみたいなのでひょっとするともっとモダンな方法があるかもしれない。
普通の入出力はテキストモードとバイナリモードがあって、ロケールの設定がテキストモードの振る舞いに影響するんだけど……
Windows の場合はテキストモード・バイナリモード・ユニコードモードに分かれていて _setmode でユニコードモードに設定する必要がある。
しかしユニコードモードの設定はワイド入出力系関数 (wprintf など) にしか影響を及ぼさない。
そんでその辺の設定をしても、入出力の内容に関してであってファイル名を UTF-8 で渡すのはたぶん駄目なはず。 (確認はしてない。 すまぬ。)
ファイル名はワイド文字 (UTF-16) に変換してから _wfopen で開くのが正当な方法だと思う。
Windows に readdir は無いので FindFirstFileW, FindNextFileW を使うのが普通の方法。
だいぶん前に調べたときは msvcrt と ucrt でちょっと振る舞いが違ったような記憶があるのでそこらにも注意が必要。
ucrt は色々と大きく改良されているみたいなのでひょっとするともっとモダンな方法があるかもしれない。
174デフォルトの名無しさん (ワッチョイ cd5c-7JbV)
2025/11/19(水) 12:12:33.50ID:DtAPl5720 UTF16は廃止してほしい
175デフォルトの名無しさん (ワッチョイ ae25-Lseg)
2025/11/19(水) 13:55:46.72ID:95cnfr9u0 ANSI C以前のC処理系で、frexp()の第2引数が、intではなくdoubleへのポインタになってるやつってありましたっけ?
176デフォルトの名無しさん (ワッチョイ 22c0-QuBx)
2025/11/20(木) 08:57:49.57ID:o66Cu/z90 >>175
無いです
無いです
177デフォルトの名無しさん (ワッチョイ 6e10-7JbV)
2025/11/20(木) 10:19:51.08ID:WN+N3a+40 intで足りなくなったときに便利
178デフォルトの名無しさん (アウアウウー Sa85-H7iN)
2025/11/21(金) 10:02:41.70ID:VM+m9mUGa doubleの方が有効桁数少ないんじゃね
179デフォルトの名無しさん (アウアウウー Sa85-H7iN)
2025/11/21(金) 10:06:53.94ID:VM+m9mUGa >>173
>Windows に readdir は無いので FindFirstFileW, FindNextFileW を使うのが普通の方法。
もちろんそうだろうと思う有難う
だが WideCharToMultiByte とか MultiByteToWideChar をちょっとすっ飛ばしたかったんだ
>Windows に readdir は無いので FindFirstFileW, FindNextFileW を使うのが普通の方法。
もちろんそうだろうと思う有難う
だが WideCharToMultiByte とか MultiByteToWideChar をちょっとすっ飛ばしたかったんだ
180はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-o1Ob)
2025/11/21(金) 11:13:01.47ID:G3R9bFuG0 >>179
Windows アプリケーション内部では UTF-16 で扱って、必要なら入出力のときに変換するというのが楽だよ。
モードの設定 (前述の _setmode) をしておけば入出力のときの変換は勝手にやってくれて明示的にプログラマが何かする必要がない。
Win32 API (64ビット版を含む) は UTF-16 が基礎なのでそれで統一しておけば文字コード変換が必要な場面は生じない。
マルチプラットフォームだとかサードパーティー製ライブラリと組み合わせるだとかし始めると色々と困ることもあるし、全体の設計は状況によるんだけど……
Windows アプリケーション内部では UTF-16 で扱って、必要なら入出力のときに変換するというのが楽だよ。
モードの設定 (前述の _setmode) をしておけば入出力のときの変換は勝手にやってくれて明示的にプログラマが何かする必要がない。
Win32 API (64ビット版を含む) は UTF-16 が基礎なのでそれで統一しておけば文字コード変換が必要な場面は生じない。
マルチプラットフォームだとかサードパーティー製ライブラリと組み合わせるだとかし始めると色々と困ることもあるし、全体の設計は状況によるんだけど……
181デフォルトの名無しさん (ワッチョイ 5202-F/8Y)
2025/11/22(土) 01:33:08.03ID:CDycBrMu0レスを投稿する
ニュース
- 中国国連大使「日本が中国に武力行使すると脅しをかけたのは初めて」 国連事務総長に書簡★3 [♪♪♪★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★8 [♪♪♪★]
- 【🐼】パンダ、日本で会えなくなる? 中国との関係悪化で不安の声 [ぐれ★]
- 【芸能】44歳・池脇千鶴、激変ぶりにネット衝撃 「まるで別人…」「変化が凄い!!」の声 [冬月記者★]
- なぜ立花孝志氏の言葉は信じられたのか…"異例の逮捕"が浮き彫りにした「SNSの危険な病理」 [ぐれ★]
- 竹中平蔵氏、万博は大成功だったと持論 批判していた人々にチクリ「反省の弁の一つも聞きたい」 [バイト歴50年★]
- エンヤ婆「ワシにクンするのじゃ💀」←これから逃れる方法
- 🏡😡
- うんこで笑える理由は全員知ってるから
- 中国「国連さん聞いて!日本が反省しないの!日本は武力介入しようとしてるよ!」
- 中国「ごめん、色々やりすぎた謝るから和解してほしい」高市首相「舐めてんの?」 [834922174]
- 手術したことあるやついるか?
