C言語なら俺に聞け 155

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 76ba-P5bm)
垢版 |
2020/05/10(日) 23:20:27.99ID:Z3WQBr9X0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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言語なら俺に聞け 154
https://mevius.5ch.net/test/read.cgi/tech/1578997950/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/07/08(水) 16:37:27.08ID:mO8IXR2n0
>>444
まだやってなかったのか?
2020/07/08(水) 17:48:03.59ID:T5O+XOTRd
>>446
ん?
コードで表示しろって言ってるんじゃない
クレームが来たらその人に対して言えってこと

つまり
不正入力時の動作は不定がソフトの仕様
で問題ないだろってこと
2020/07/08(水) 18:06:49.38ID:EQ9tLW1C0
不正入力ではなくてコンソールと入力バッファの仕様が問題
標準入力stdinがキーボードの場合入力バッファには目的とする文字コードの直後に必ず改行コードが残る
scanfの書式が%dなどの数値型だと改行は取り込まれないので数値型を連続して使用した場合は型が合わずに続くデータを取りこぼす
2020/07/08(水) 18:11:07.83ID:SF9V14yC0
ん、%dは先行する空白類文字をスキップするぞ
2020/07/08(水) 18:25:39.71ID:QndvSIjd0
>>449
正しい入力で正しく動かないならそれはバグだよ
2020/07/08(水) 18:29:27.69ID:EQ9tLW1C0
訂正
たしかに数値型だけなら問題はないね
数値型と文字型の混在時に問題が起きる

scanf("%d", &x); // 数値 + 改行
...
scanf("%c", &y); // 必ず直前の改行となるので入力不可
...
scanf("%d", &z); // 数値 + 改行
453デフォルトの名無しさん (アウウィフ FF09-VqvP)
垢版 |
2020/07/09(木) 09:32:01.69ID:vrNDocOmF
無理にscanf使わずに
fgetsとsscanfやろ
2020/07/09(木) 09:45:13.42ID:jzluGOwX0
またアホが湧いた
455デフォルトの名無しさん (ワッチョイ 23ad-Bqa1)
垢版 |
2020/07/09(木) 09:51:17.63ID:RjpwDZh+0
Windows10proでC使いたいんです。
目的は大量のテキストデータの変換なので、
グラフィックとか音とかはプログラミングしません。

テキストでコーディングして、
CUIで実行ってな感じができればいいんですけど、
このぐらいだとMinGWが適当なんでしょうか?
2020/07/09(木) 09:57:12.39ID:uQo6bqoB0
tdm-gcc
457デフォルトの名無しさん (ワッチョイ 23a5-T5iX)
垢版 |
2020/07/09(木) 09:57:39.86ID:f5aLRaXK0
https://www.gnu.org/software/coreutils/coreutils.html

このツールをDLしてwindowsフォルダに全部入れる
2020/07/09(木) 10:57:01.79ID:g1m/M0Pb0
>>453
プログラミングの教育現場では、未だにscanf()が使われているんだ
この関数の欠陥部分も含めて教育の題材にはいいんじゃないかな
459デフォルトの名無しさん (アウウィフ FF09-VqvP)
垢版 |
2020/07/09(木) 11:04:23.27ID:vrNDocOmF
一行目も二行目も知ってる
2020/07/09(木) 12:36:53.26ID:ccQ+p+MVM
>>454
>>453は正しいだろ

>>458
対策しようのない欠陥だから唯一できる教育は「使うな」しかないけどね
2020/07/09(木) 12:39:21.11ID:zi4hgNgDd
初心者教育でとりあえずコードを書い動かしてみる
でscanfじゃなきゃ何を使えって?
2020/07/09(木) 12:41:37.65ID:jzluGOwX0
>>460
対策しようのない欠陥と自分で言いながら何が正しいとぬかす?
2020/07/09(木) 12:42:19.97ID:2UhyUN9nd
fgets
2020/07/09(木) 12:48:17.81ID:jzluGOwX0
配列もFILE構造体も教えてない時点でfgetsとsscanfとか無理だろ
逆にこの辺まで教えてまだ実用的な入力関数が作れないようなら教え方が下手すぎ
2020/07/09(木) 12:49:49.88ID:jzluGOwX0
つーか、その被害者がいつまでもfgetsとsscanfにしがみついたまま進歩しないんだろうが
2020/07/09(木) 15:17:37.22ID:ccQ+p+MVM
>>462
対策しようがないから使わず他の関数使う
って話なんだが、理解できないのか?w
2020/07/09(木) 15:18:31.71ID:ccQ+p+MVM
>>465
お前みたいな老害はそうなのかもなw
2020/07/09(木) 16:18:37.55ID:jzluGOwX0
>>467
fscanfとsscanfにしがみついてるのはお前
俺はそんなアホなことしてない
469デフォルトの名無しさん (エムゾネ FF43-VqvP)
垢版 |
2020/07/09(木) 16:39:16.37ID:8CMntJuyF
scanf要らねと思ったら後はgetcharで何でも出来るだろ
2020/07/09(木) 18:22:16.49ID:EQDklninM
>>468
ならいいじゃん
お前以下の奴なんてめったにいないんだしw
2020/07/09(木) 18:51:05.00ID:jzluGOwX0
>>470
罵倒だけのレスもらうと優越感で気持ちいいわ
2020/07/09(木) 19:04:00.56ID:g5p2N13I0
代案出さずに否定だけって
ダサい
2020/07/09(木) 19:22:40.81ID:0UE7wqUeM
罵倒だけの>>468みたいなレスを見ても別に優越感なんて感じないけどね
むしろ憐れみしか感じないw
2020/07/09(木) 21:17:48.63ID:jzluGOwX0
>>473
まあいいからfgetsとsscanfにしがみついてろよ
俺がどうかしてやる筋合いないし勝手にしな
2020/07/09(木) 21:18:33.10ID:jzluGOwX0
ここ技術板だぜ? 少なくとも何らか専門用語入れようや
2020/07/09(木) 22:17:39.65ID:bcr0ax7J0
> 罵倒だけのレスもらうと優越感で気持ちいいわ
どこに専門用語があるんだろう…?
ますます哀れに思えてきたわw
2020/07/10(金) 06:59:30.23ID:d1dEL6aU0
技術的な話で突っ込めなくなってる無様な姿が最高の褒め言葉さ
2020/07/10(金) 07:01:07.48ID:d1dEL6aU0
fgetsとsscanfを使うのが正しい!と強弁してるだけで説得力ねえんだよ
2020/07/10(金) 07:40:55.73ID:qqWcHkmP0
>>478
scanf使うならfgetsとsscanf使えって話が出ただけでないの?
2020/07/10(金) 07:44:14.14ID:d1dEL6aU0
scanfの使い方の話をしてたんだよ
そこへ付いて来れないからって他の関数を使えと話を逸らしに来たやつがいて
アホつったら何の説明もなしにfgetsとsscanfを使うのが正しいと強弁する別のアホが来た
2020/07/10(金) 07:49:10.16ID:d1dEL6aU0
464あたりでscanfを使う理由をちゃんと説明しているのに
そこは無視してくだらねえ戯れ言ばかりぬかしやがる
2020/07/10(金) 07:54:54.37ID:7RoGj1wV0
>>464はscanfを使う理由ではない
2020/07/10(金) 08:08:34.80ID:d1dEL6aU0
だから何の説明もなしにdisっても説得力ねえんだってば
2020/07/10(金) 08:09:27.01ID:a7Xsl7M10
scanf使いたいなら割り切って使うか、それで起こる問題を解決したいなら別の関数使えって流れじゃないの?
モメるポイントが分からんのだが。
2020/07/10(金) 08:10:39.67ID:bFyJThgA0
>>414 の質問に戻ると getchar あたりで1字ずつ拾いながら
必要に応じてバッファを拡張する方法になるのかねぇ。
%s の機能だけなら空白と空白以外だけ考慮すりゃいいわけで。

ロケールまで対応させるとこれまた大変そうだけど。
2020/07/10(金) 08:22:02.59ID:a7Xsl7M10
>>485
入力した文字列を何に使うのか次第だろう。
入力すること自体は手段であって目的ではないのだから。
オンメモリに全部展開しないといけない用途なのか?
ハッシュを求めるために計算済みの値は捨てていいのか?
暗号化のために一定のブロック長があればいいのか?
適した方法はそれぞれ異なる。
んでその当初の質問の答えは既に出てるし。
2020/07/10(金) 09:04:58.78ID:lyRh4kcU0
「getchar あたりで1字ずつ拾いながら」
ってことを経た後でないと scanf を正しく使うのは難しいんじゃないかな。
488デフォルトの名無しさん (アウウィフ FF09-jFjK)
垢版 |
2020/07/10(金) 11:08:56.61ID:2/CcitmbF
>>480
>scanfの使い方の話をしてたんだよ
>そこへ付いて来れないからって他の関数を使えと話を逸らしに来たやつがいて
>アホつったら何の説明もなしにfgetsとsscanfを使うのが正しいと強弁する別のアホが来た

ここだけ読むと >>480 がただのアスペでコミュ障にしかみえない
2020/07/10(金) 11:21:34.56ID:qqWcHkmP0
>>488
実際そうかなと思うよ。他の人の話の興味が移ってきてるのにじずんの言いたいことが正しい
2020/07/10(金) 11:22:21.30ID:qqWcHkmP0
途中で書き込んでしまった。
自分の言いたいことが正しい、他のことを話す奴は理会できてないって思考なんだろう。
491デフォルトの名無しさん (アウアウウー Sa09-Sz3q)
垢版 |
2020/07/10(金) 11:37:03.81ID:g0Z+ZvbJa
めんどくせえから GNU のライブラリにある getline() でも使っとけよ。
1行がどんなに長くてもメモリが許す限りどんどん読んでくれるぞ。
2020/07/10(金) 11:47:09.11ID:MPjC4RwwM
関数を呼び出す側が、使用するメモリの上限をコントロールできないというのは
それはそれで微妙にリスク
493デフォルトの名無しさん (アウアウウー Sa09-Sz3q)
垢版 |
2020/07/10(金) 12:00:38.40ID:g0Z+ZvbJa
じゃあfgets()で。
2020/07/10(金) 12:23:02.32ID:y8IP2wTs0
誰にも迷惑かからないところでどう使おうかは自由だな。
2020/07/10(金) 12:23:50.72ID:d1dEL6aU0
>>488
ここは技術板だ
アスペの話がしたいカナーはメンヘル板か医者板へ逝け
2020/07/10(金) 12:26:34.82ID:a7Xsl7M10
>>495
scanf の使い方の話は終わってね?
議論したい点として何が残ってるの?
2020/07/10(金) 12:28:13.10ID:d1dEL6aU0
>>496
あんたに何の権限があってそんな命令するんだよ
余計な口だしはしないでもらおうか
2020/07/10(金) 12:28:33.38ID:6/cNdm0nd
入門書でscanfを扱うのが適切か否か
499デフォルトの名無しさん (アウウィフ FF09-jFjK)
垢版 |
2020/07/10(金) 12:31:35.35ID:2/CcitmbF
getchar()からが良い
scanf()は反面教師
2020/07/10(金) 12:32:24.53ID:6/cNdm0nd
数値入力にたどりつくまでえらい大変だな
501デフォルトの名無しさん (アウアウウー Sa09-Sz3q)
垢版 |
2020/07/10(金) 12:45:54.18ID:Y8Yy4fdKa
まあ、scanf()の%sだけが問題なんだよな。
2020/07/10(金) 12:47:54.13ID:d1dEL6aU0
>>499
人の話を完全に無視して同じことばかり呟き続けやがって
ほら、どでかいブーメラン返してやんよ
> アスペでコミュ障
2020/07/10(金) 12:55:06.27ID:qqWcHkmP0
>>498
入門書のプログラムは基本的に使うのは読者本人だから、お手軽な入力処理として使うのはありだと思う。ただ、使い方の注意点は簡単に補足しておいてほしいかな。知らずに、固まった!バグだ!とか騒いだりしないように。
それと、入門書の時点で堅牢な入力処理なんて必要ではないけど、将来的に実用的なプログラムを作るときには必要になってくるということを触れておいてほしい。
2020/07/10(金) 13:37:44.03ID:d1dEL6aU0
>>500
ほんこれ

連中はこの指摘に答えられない
だからレスがない
505デフォルトの名無しさん (JP 0H93-4zP6)
垢版 |
2020/07/10(金) 13:40:12.53ID:pQ428/DjH
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
2020/07/10(金) 13:54:36.12ID:cHuUURyg0
俺に聞け! ってだけで
回答するとは言っていない
2020/07/10(金) 14:21:32.04ID:/uHfdbTha
確かに>>1の概要欄にも答えるとは一文字も書かれて無いw
2020/07/10(金) 18:44:30.98ID:d1dEL6aU0
そこへ逃げるかwww
2020/07/10(金) 18:55:09.14ID:rYXxVyEBM
>>508
逃げるもなにも、scanfの話なんて出尽くしてるじゃん。
他になにを話したいの?
役に立たないことブツブツ言ってないで話を振ればいいじゃん。
2020/07/10(金) 19:00:44.43ID:7RoGj1wV0
言い出しっぺの法則
2020/07/10(金) 19:19:20.65ID:Y3MlsMegH
>>491
そういうのが欲しくて自分で書いてしまったんですけど、すでにあるんですね…そう思う人は結構いるってことですね

>>492
getline() の中の malloc() が失敗したことがわかるんだったら、私は問題にしないですね
2020/07/10(金) 22:08:00.13ID:edpv1F1UM
>>511
QZ先生がどのくらいのリスクを前提に言っているのかにもよりますけど、
上限なき malloc については、リスク回避の点で、私はやっぱり問題にしたいですねえ。

おっしゃる通り、malloc が失敗を返した場合は概ね問題ないと思うのですが。
逆に malloc が成功を返した場合はどうです?
共有リソースとしてのメモリを奪いきってしまった結果としての成功であるなら、
OSによっては、他のプロセスのメモリ確保失敗に伴う致命的エラーを誘発するなどして、
広範囲な問題を引き起こすやもしれません。

先人の知恵として、システムコールやAPIの仕様として、インターフェイスにせよ、内部的にせよ、上限を設けてあると思います。
getline の内部は見てないのですが、極端に大きなサイズになりそうなら、malloc を呼び出す前に、
上限値を超えました的なエラーを返すような、慎重なコーディングになっていることを期待したいところです
2020/07/10(金) 23:07:47.23ID:HDImBgbn0
>>511
実行環境に固有の特殊事情ではあるけど
Linux だとメモリが足りなくても malloc が成功する場合がある。 (オーバーコミット)
malloc の返り値を気にしても無駄。

想定以上の巨大な行の読み込み (メモリ割り当ての失敗) に対して
何か対処する機会なくプロセスごと殺される (OOM Killer) かもしれないので、
想定する上限があるなら設定できて欲しいよ。
514デフォルトの名無しさん (ワッチョイ 2301-LRpg)
垢版 |
2020/07/11(土) 00:41:24.74ID:UdJEarb20
ドライバレベルの仕様に詳しい人って、そこそこ不幸だよね😅
2020/07/11(土) 00:58:32.96ID:YkgvwUMV0
誰かが特攻隊に志願しないと行けないからな
2020/07/11(土) 04:47:05.81ID:dhYEJgZ00
>>513
メモリを確保するだけじゃなく中身を詰めて返すから、内部でメモリ量を超える malloc に成功しながら中身を詰めてる過程でメモリ不足で落ちそうだね。
上限設けてないと回避できない深刻な問題になりそう。
2020/07/11(土) 20:25:40.62ID:3ggQxlyq0
mallocはウィザードリィみたいだよな
2020/07/12(日) 11:24:42.19ID:VdrMQ+ag0
>>517
どの辺が?
2020/07/12(日) 12:22:43.74ID:pMv4WACh0
>>518
岩の中にテレポートしそうなあたりじゃないかな
2020/07/12(日) 12:31:19.68ID:lQJaWZP00
そういえば、初期のosxはオーバーコミットと動的スワップの合わせ技で、ディスクの空き容量が
少ないとよく固まってたな。しかもfinderではまだ空きがあるように見えても実際には最小空き容量に
引っかかるという油断のならない仕様だった。
2020/07/12(日) 14:47:47.78ID:RLT83ouV0
マクロを使った面白いコードを教えてください
2020/07/12(日) 14:50:59.64ID:uGVzSaa20
先に面白いの判定基準を出せ
2020/07/12(日) 14:55:11.44ID:RLT83ouV0
>>522
トリッキーなやつで普段お目にかかれないやつです
2020/07/12(日) 16:14:17.46ID:TX1mpKr60
>>523
こういうの?
http://www.ioccc.org/2019/ciura/prog.c
2020/07/12(日) 16:26:56.92ID:RLT83ouV0
>>524
いいですね
これは何をやってるコードですか?
2020/07/12(日) 16:34:02.06ID:TX1mpKr60
自分で解読しなきゃ
他人に聞いたら意味ないよ
2020/07/12(日) 18:07:11.46ID:eOx5QXnj0
>>524
殺意湧くコードだわ。
信じられないだろうが、こういうの書きたがるやつ沢山居る。
2020/07/12(日) 19:01:50.30ID:XR2tpNWXM
落ち着け、IOCCC知らんのか
529デフォルトの名無しさん (ワッチョイ ab7c-jFjK)
垢版 |
2020/07/12(日) 19:40:25.98ID:uGVzSaa20
昔観た砂嵐のもこんなんだったな
マクロ使ってたかどうかは覚えてないけど
いずれにしても中身に意味があるとは思えない
2020/07/12(日) 19:48:29.22ID:TX1mpKr60
地上波アナログ?
531デフォルトの名無しさん (ワッチョイ ab7c-jFjK)
垢版 |
2020/07/13(月) 09:07:37.15ID:+mCuetAH0
落ち着け、IOCCC知らんのか
2020/07/13(月) 11:02:55.12ID:wLJMlZf60
わざと解りにくく書いたコードだぞ
「ちゃんと動くプログラム」という制約のもとで
解りにくさを競っているんだよ
533デフォルトの名無しさん (アウアウエー Sa13-c9t6)
垢版 |
2020/07/13(月) 11:11:26.83ID:Q6XHo6fua
>>525
岩の中にテレポートしそうなあたりじゃないかな
2020/07/13(月) 12:02:49.97ID:JZTlaHWid
>>527
素人かよ
2020/07/13(月) 12:06:46.27ID:WBkWHxcTF
>>527 本人じゃないけど
成型ツールで戻せば良いとか言うレベルじゃなくて
マジックナンバー使いまくりの手動最適化コードとか
読み難くする以外のメリットなんにも無い時間の無駄
難読化ツールとかの話も関係無い
2020/07/13(月) 12:12:02.64ID:JZTlaHWid
人間が読む事を想定してないコード
なんていう発想は無いのか
2020/07/13(月) 12:18:07.92ID:wLJMlZf60
機械語がそうだね
2020/07/13(月) 12:20:50.91ID:HqaSJoay0
難読ソースコンテストってのがあるって25年前に聞いた。
539デフォルトの名無しさん (エムゾネ FF43-jFjK)
垢版 |
2020/07/13(月) 12:22:42.17ID:WBkWHxcTF
どんなネタでも餌にして生きていける人って別の意味で浦山
2020/07/13(月) 12:39:50.37ID:17o/9bhC0
って言うか >>1 でリンク張られてるサイト
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
の 20.36 が 国際難解Cコードコンテスト(IOCCC) の紹介ですよ。

まぁ知らなくても実用では少しも困らないネタ話だけどね。
541デフォルトの名無しさん (JP 0H93-4zP6)
垢版 |
2020/07/13(月) 13:06:29.12ID:UIoR1/02H
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
542デフォルトの名無しさん (ワッチョイ 23ad-skOr)
垢版 |
2020/07/13(月) 23:11:58.86ID:9EBd4T6S0
>>540
読み方は?
2020/07/15(水) 14:29:54.86ID:U8iX10oDd
あいおーしーしーしー
2020/07/15(水) 15:00:37.70ID:67nW9VWC0
催し物やな
2020/07/15(水) 15:52:55.55ID:N3ltiDOr0
市民館みたいなとこでやってるわけじゃないがな
546デフォルトの名無しさん (ワッチョイ daad-0yBj)
垢版 |
2020/07/15(水) 20:44:36.96ID:pJ20MS8a0
CCCの部分はトリプルCではなく?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況