[過去ログ]
C言語なら俺に聞け 163 (1002レス)
C言語なら俺に聞け 163 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
469: デフォルトの名無しさん (ワッチョイ 3369-iztn) [] 2024/12/16(月) 18:18:31.53 ID:o/MtQx1A0 >>466 自分の知識だと外に置くくらいしか思いつかんかった http://mevius.5ch.net/test/read.cgi/tech/1721137434/469
470: デフォルトの名無しさん (ワッチョイ 666d-1w4P) [sage] 2024/12/16(月) 18:20:09.41 ID:/03Ox5VG0 TCHARは_UNICODEのマクロの定義の有無によって16bitまたは8bitになる http://mevius.5ch.net/test/read.cgi/tech/1721137434/470
471: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-aNNs) [sage] 2024/12/16(月) 18:26:34.86 ID:26oXJeTE0 >>467 > ただのsizeof(buf)じゃだめ? だめ。 TCHAR はコンパイル時に ANSI モードか Unicode モードかで定義が切り替わる。 ANSI モードのときは char で Unicode モードのときは WCHAR と同じ。 _stprintf_s も ANSI モードのときは sprintf_s に置き換えられて Unicode モードのときは swprintf_s になる。 swprintf_s のときの第一引数は文字数 (この場合は UTF-16 でのコードポイントの数) なのでバイト数である sizeof(buf) を渡しても駄目。 ANSI モードでしかコンパイルしないのであれば別に割らなくても大丈夫だけど、それならそもそも切り替えを前提としたマクロを使う必要ないしな……。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/471
472: デフォルトの名無しさん (ワッチョイ 3369-iztn) [] 2024/12/16(月) 22:06:23.18 ID:o/MtQx1A0 Unicodeになるとなんで割る必要が出てくるのかいまいち掴めないなあ BuffのサイズをTCHARのサイズで割ってどうしてサイズが出せるの? http://mevius.5ch.net/test/read.cgi/tech/1721137434/472
473: デフォルトの名無しさん (ワッチョイ 666d-1w4P) [sage] 2024/12/16(月) 22:41:01.10 ID:/03Ox5VG0 >>472 ごちゃごちゃ考えてないで とっととデバッガ使って値を確認しな http://mevius.5ch.net/test/read.cgi/tech/1721137434/473
474: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k) [sage] 2024/12/16(月) 22:48:31.98 ID:26oXJeTE0 配列の大きさを得るために配列のバイト数を配列要素のバイト数で割るのはごく一般的なイディオムなので何がわからないのかわからない。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/474
475: デフォルトの名無しさん (JP 0Hff-K+1m) [] 2024/12/16(月) 22:57:30.45 ID:Q04ymynwH sssp://img.5ch.net/ico/nida.gif これらのアイデアを実装するために取り組んでいる中で、EchoAPIが設計ワークフローを本当に効率化してくれた http://mevius.5ch.net/test/read.cgi/tech/1721137434/475
476: デフォルトの名無しさん [sage] 2024/12/17(火) 00:02:56.65 ID:KLd2kDAJ0 >>472 Unicodeの場合、2バイトで1文字を表現 ?????????????????? で9文字、18バイト ANSIの場合、 ????????? で9文字、9バイト > sizeof(buf)/sizeof(TCHAR) sizeof(buf)が指すのはバイト数、Unicodeなら18、ANSIなら9 sizeof(TCHAR)が指すのは1文字のバイト数、Unicodeなら2、ANSIなら1 そして stprintf_s の引数 sizeOfBufferはバイト数ではなく「格納する最大文字数」であること 引数がバイト数ならsizeof(buf)でいいけど、引数が文字数を求めているならsizeof(buf)ではおかしくなる 上の例で言えば、Unicodeは18バイト9文字で本来は9とするところを18と指定してしまうことになる すると関数側はバッファが18文字分(バイトで32バイト)あると勘違いするわけでバッファオーバーフローを起こす sizeof(buf)/sizeof(TCHAR) は18バイトの領域があって、それを1文字のバイト数で割って「9文字」ということ http://mevius.5ch.net/test/read.cgi/tech/1721137434/476
477: デフォルトの名無しさん [sage] 2024/12/17(火) 00:05:50.03 ID:KLd2kDAJ0 丸付き数字自体が1文字1バイトって意味じゃないからな 内部表現を表すために使用しただけで数字がx文字目として見て http://mevius.5ch.net/test/read.cgi/tech/1721137434/477
478: デフォルトの名無しさん (アウアウエー Sae2-N2kD) [] 2024/12/17(火) 10:25:09.48 ID:hEkGaD6xa _countof() http://mevius.5ch.net/test/read.cgi/tech/1721137434/478
479: デフォルトの名無しさん (ワッチョイ 666d-1w4P) [sage] 2024/12/17(火) 12:09:40.76 ID:2fZmW/080 いやvc++使ってんならstd::sizeでいい http://mevius.5ch.net/test/read.cgi/tech/1721137434/479
480: デフォルトの名無しさん (ササクッテロロ Spb3-DtHK) [sage] 2024/12/17(火) 12:36:10.86 ID:5c2Y3gwMp C言語スレだろw http://mevius.5ch.net/test/read.cgi/tech/1721137434/480
481: デフォルトの名無しさん (ワッチョイ be63-Vy5I) [sage] 2024/12/17(火) 12:49:19.32 ID:6SQ8uEd20 そこは禁欲しましょう http://mevius.5ch.net/test/read.cgi/tech/1721137434/481
482: デフォルトの名無しさん (ワッチョイ 33ef-iztn) [] 2024/12/18(水) 01:25:30.31 ID:ILkVh3nA0 >>476 朝わかりやすいね でもANSIって1バイトと2バイト混合できるよね?どうなっちゃうんだろう http://mevius.5ch.net/test/read.cgi/tech/1721137434/482
483: デフォルトの名無しさん [sage] 2024/12/18(水) 02:49:26.43 ID:NqM0X43U0 >>482 ANSIはバイト=文字数 そもそも論理的な文字数じゃなくて処理単位での文字数ね だから strlen("あいう") = 6 strlen("123あ67い0") = 10 // 数字は半角(1バイト)、ひらがなは全角(2バイト) Unicodeの場合でも正しい文字数になるわけじゃない、サロゲートペアの場合に文字数は2(4バイト)になる http://mevius.5ch.net/test/read.cgi/tech/1721137434/483
484: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k) [sage] 2024/12/18(水) 09:23:44.77 ID:w442kBzm0 Unicode だとサロゲートペアを脇においても異体字だの合成だのといったものがあるし、人間が紙の上に書くときの直感的な感覚で言うところの「文字数」とは定義が違うので、各文字コードの仕組みを知っておくしか仕方がない。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/484
485: デフォルトの名無しさん (ワッチョイ 3339-iztn) [] 2024/12/18(水) 17:31:07.70 ID:ILkVh3nA0 >>483 >>484 つまりこの方法だとコンパイル時に気をつけるしか無いってことか、大変だね テキストエディタみたいなの作ろうとすると禿げ上がりそう http://mevius.5ch.net/test/read.cgi/tech/1721137434/485
486: デフォルトの名無しさん (ワッチョイ 8b93-1p0V) [sage] 2024/12/18(水) 17:41:39.49 ID:NuF84nX60 文字コード問題よりC言語で作れってほうがハゲりそうだ http://mevius.5ch.net/test/read.cgi/tech/1721137434/486
487: デフォルトの名無しさん (ワンミングク MMda-UGgi) [sage] 2024/12/18(水) 17:56:26.27 ID:2i1n2GHXM 固定長ならそこまで禿げないかと http://mevius.5ch.net/test/read.cgi/tech/1721137434/487
488: デフォルトの名無しさん (ワッチョイ 66be-1w4P) [sage] 2024/12/18(水) 18:24:42.01 ID:ccS3E3GJ0 >>485 方法が大変? お前まだ理解できてないぞ 一般論として文字コードの扱いは大変だがTCHARの仕組みは単純だ http://mevius.5ch.net/test/read.cgi/tech/1721137434/488
489: デフォルトの名無しさん (ワッチョイ 2679-qWVo) [sage] 2024/12/18(水) 18:25:51.62 ID:U+/f/ac80 CがC++だったとしても変わらんでしょ VSCodeはレンダリングの都合でWebルレームワークとjavascriptで作られてるからC/C++製エディタと比較して遅いというデメリットがある http://mevius.5ch.net/test/read.cgi/tech/1721137434/489
490: デフォルトの名無しさん (ワッチョイ 66be-1w4P) [sage] 2024/12/18(水) 18:34:50.50 ID:ccS3E3GJ0 c言語で文字列処理はクソ面倒でしょ ライブラリの整備からやる必要がある上にコードがとっ散らかる http://mevius.5ch.net/test/read.cgi/tech/1721137434/490
491: デフォルトの名無しさん (ワッチョイ 2679-qWVo) [sage] 2024/12/18(水) 18:36:51.22 ID:U+/f/ac80 Windowsの場合使用フォントに応じて描画幅を返すAPIに丸投げできるから大した手間にならないが メモ帳の「右端で折り返す」相当を実装する場合右端のどこで切るかでその人センスが露になる http://mevius.5ch.net/test/read.cgi/tech/1721137434/491
492: デフォルトの名無しさん (ワッチョイ 2679-qWVo) [sage] 2024/12/18(水) 18:41:35.77 ID:U+/f/ac80 >>480 何か誤解があるみたいだが開発言語にCを選ぶようなやつがそんなのを面倒に感じる事はないんだよ http://mevius.5ch.net/test/read.cgi/tech/1721137434/492
493: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-aNNs) [sage] 2024/12/18(水) 22:35:54.78 ID:w442kBzm0 アプリケーションを作るにあたって TCHAR が必要になる状況はそれほどない。 Unicode 対応をきちんとやるならそれとは別に ANSI 版も作るという必要性はないし、両方を作る必要性がないなら切り替えを意識する必要もないから。 最初から WCHAR で書けばよい。 ライブラリとしてまとめるならどちらにも対応したほうが良いこともあるかもしれんけど。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/493
494: デフォルトの名無しさん (ワッチョイ be63-Vy5I) [sage] 2024/12/18(水) 23:14:04.02 ID:1nhczz8f0 テキストエディタ、アセンブラで作った奴いるだろう ハゲてはいなかったと思う http://mevius.5ch.net/test/read.cgi/tech/1721137434/494
495: デフォルトの名無しさん (アウアウエー Sae2-N2kD) [] 2024/12/19(木) 15:05:41.21 ID:p9TYuGiMa >>483 strlen("123あ67い0") == 12 // utf-8 http://mevius.5ch.net/test/read.cgi/tech/1721137434/495
496: デフォルトの名無しさん (ワッチョイ be63-Vy5I) [sage] 2024/12/19(木) 15:35:21.01 ID:boHB/shj0 strcat()、実装大変そうだな http://mevius.5ch.net/test/read.cgi/tech/1721137434/496
497: デフォルトの名無しさん (ワッチョイ eaad-NYGQ) [sage] 2024/12/19(木) 18:03:52.50 ID:KNZC4rFA0 UTF-8のバイト数ではなく文字列の長さを調べるソース https://drive.google.com/drive/folders/10jgzKVUYPXQhC566bBmrqnnBLJI4pEbL http://mevius.5ch.net/test/read.cgi/tech/1721137434/497
498: デフォルトの名無しさん (ブーイモ MMbf-1w4P) [sage] 2024/12/19(木) 18:29:36.25 ID:ByBpVqn8M >>497 Unicodeで文字列の長さって何? 書記素クラスタか? って突っ込まれるから知ったかぶらないほうがいいぞ http://mevius.5ch.net/test/read.cgi/tech/1721137434/498
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 504 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s