◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C言語の設計ミスった危険な関数トップ10決めようぜ


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1574306624/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん2019/11/21(木) 12:23:44.93ID:T7Jjyyy1
gets関数とか

その他の例
https://www.jpcert.or.jp/sc-rules/c-msc24-c.html

2デフォルトの名無しさん2019/11/21(木) 15:39:01.67ID:IZBPdnFY
Anal

3デフォルトの名無しさん2019/11/22(金) 14:16:12.00ID:TbHXN4jn
当時の設計なら、gets の仕様はああなる。

4デフォルトの名無しさん2019/11/22(金) 14:46:28.12ID:vYD7HZZ7
gets()をゲッツ、puts()をプッツと読んでたな

5デフォルトの名無しさん2019/11/22(金) 14:53:55.43ID:eCK2aX+t
strtokの読み方で出身地が分かる

6デフォルトの名無しさん2019/11/22(金) 15:15:08.67ID:vYD7HZZ7
>>5
それはストアトークと読んでた

7デフォルトの名無しさん2019/11/23(土) 04:11:30.09ID:l4WHmfnE
最大のミスは、文字列そのものをデータ型としては持たずに、
文字列はヌルで終端された不定長の文字の配列であるとしたことにある。

8デフォルトの名無しさん2019/11/23(土) 06:08:18.47ID:eMnkZzKn
どうすれば良かった?

9デフォルトの名無しさん2019/11/23(土) 06:14:02.33ID:GXkG1Oic
関数だっつうてんのに

10デフォルトの名無しさん2019/11/25(月) 21:55:20.72ID:E+NtJXA3
scanfだろjk

11デフォルトの名無しさん2019/11/26(火) 04:12:31.62ID:As19A6dg
putchar()はプッチャーと読んでいた

12デフォルトの名無しさん2019/11/26(火) 12:29:09.20ID:dAEqoOXB
scanf
strtok
feof

13デフォルトの名無しさん2019/11/26(火) 20:24:02.10ID:feqSm/53
C言語の関数名ってまだリンカがシンボルの先頭から6文字までしか認識しなかった頃の名残だしな
変な短縮形が多い

14デフォルトの名無しさん2019/11/27(水) 03:05:40.28ID:nQw9n1Di
strcpy()とか意図しようがしまいが簡単にメモリをぶっ壊せる
よくよく考えるとキチガイ過ぎる

15デフォルトの名無しさん2019/11/27(水) 12:17:59.87ID:zdI/1sLa
C言語に安全性を求めるのは違う

16デフォルトの名無しさん2019/11/27(水) 12:31:41.61ID:KtqS+hCI
time
localtime

17デフォルトの名無しさん2019/11/27(水) 13:15:40.24ID:MN5dlGGA
>>15
ほんそれ

18デフォルトの名無しさん2019/11/27(水) 13:50:48.05ID:pAkxzJaX
>>15
根本的な所を勘違いしてる。

C言語で安全性が求められないからと言って、
C言語で作ったアプリには安全性は求められるだろ?

例えば、getsは安全に使うことが不可能なんだよ。

19デフォルトの名無しさん2019/11/27(水) 14:42:57.39ID:MN5dlGGA
大昔に出来た関数なんだから多くを求めるな

20デフォルトの名無しさん2019/11/30(土) 20:36:22.78ID:4Da+M2q+
>>11
俺はプッキャーだった

21デフォルトの名無しさん2019/11/30(土) 20:38:28.97ID:4Da+M2q+
>>18
> 例えば、getsは安全に使うことが不可能なんだよ。
ならgetsを使わずにgetcでやればいいだけ

22デフォルトの名無しさん2019/11/30(土) 21:25:24.92ID:vRr1Hx4s
安全は考えないで設計したのでミスってはいない

23デフォルトの名無しさん2019/11/30(土) 22:19:14.33ID:Zwer7NNs
アブドーラ・ザ・プッチャー

24デフォルトの名無しさん2019/12/01(日) 10:49:26.54ID:uAQAPMuh
組み込みでC言語は使うけど、10個以上の標準関数って使わないな...。

25デフォルトの名無しさん2019/12/01(日) 12:47:24.87ID:p3Z7Nr0h
memcpy / memset / memcmp
strlen / str(n)cpy / str(n)cmp / str(n)cat

これで10個

26デフォルトの名無しさん2019/12/01(日) 13:17:11.11ID:W5IIwakz
組み込みで文字列扱わないことも多いね。
どんな製品でもほぼ使うのはmemset、memcpy、memcmpぐらいじゃない?

27デフォルトの名無しさん2019/12/01(日) 17:41:11.15ID:YWi4MX0G
>>25

>>1のリンク先より

未チェックの時代遅れの関数
以下の関数を、未チェックの時代遅れの関数と定義する。
memcpy, strcpy, strncpy, strcat, strncat (一部抜粋)


半分あてはまってるなw

>>26
memcpyは危険なので使うのはやめましょう

28デフォルトの名無しさん2019/12/01(日) 20:53:25.46ID:IKYJT3WJ
C言語ではなく標準ライブラリの話かい。

29デフォルトの名無しさん2019/12/01(日) 21:25:08.28ID:7gLQ63yc
アセンブラより安全なら良いじゃん

30デフォルトの名無しさん2019/12/02(月) 00:51:13.45ID:RIgVO6ZZ
memcpyが危険とか言うなら
C言語使うなってことになる

31デフォルトの名無しさん2019/12/02(月) 00:53:00.40ID:RIgVO6ZZ
>>28
標準じゃない関数だと...
失敗談みたいなのを期待してた?

32デフォルトの名無しさん2019/12/02(月) 02:04:59.50ID:AAYR8Yqw
>>1
セキュリティ考慮していない元関数より、代替関数の設計ミスが酷いな

strtodとかなにこれw
エラーの返し方がアホすぎる

33デフォルトの名無しさん2019/12/02(月) 06:48:47.55ID:kJrDK+4B
>>32
> strtodとかなにこれw
> エラーの返し方がアホすぎる
そう言うのは改善案を提案しないと単なるアホの独り言にしかならんぞw

34デフォルトの名無しさん2019/12/02(月) 13:15:48.70ID:EYnQFBh2
一体どういう考えで昔の人は、getsの仕様はあれでOKだと思ったんだろう?
どう考えてもバッファオーバーフローするやん?
しない方法なんて存在するの?

35デフォルトの名無しさん2019/12/02(月) 13:18:13.53ID:xJykAg3Z
バッファオーバーフローしないデータを食わせれば良い
わざわざ変なデータを入力するヤツが悪い

って考えの時代の関数だ

36デフォルトの名無しさん2019/12/02(月) 13:41:09.67ID:EYnQFBh2
でもさ、getsってキーボード入力やろ?

37デフォルトの名無しさん2019/12/02(月) 15:30:07.33ID:LC/c96JG
gets は、もう、標準ライブラリにも入っていないので許せ

38デフォルトの名無しさん2019/12/02(月) 18:02:20.65ID:kmSxls5X
>>36
わざわざ変なデータを入力するヤツが悪い

39デフォルトの名無しさん2019/12/02(月) 18:41:59.62ID:E2hgf+6B
ダンディ坂野「gets!!」

40デフォルトの名無しさん2019/12/02(月) 20:50:15.44ID:kJrDK+4B
>>36
1行80文字とかって決め打ちできる環境なんでしょ
自分しか使わないようなツールとかならこれで十分
って考え

41デフォルトの名無しさん2019/12/03(火) 01:51:02.34ID:dBsSbed7
8ビットの整数型を char などというものにしたのも、アメリカ人は
自分たちの英語しか知らない田舎者であることを如実に表している。

42デフォルトの名無しさん2019/12/03(火) 09:14:31.49ID:yN5r9ueQ
>>40
64kbでも広大な空間だったな

43デフォルトの名無しさん2019/12/03(火) 12:22:07.21ID:90Sp73uq
>>41
実に田舎者の考え方で笑える
逆だよ、都会の人間は都会のことしか知らないし知る必要がない
なぜか田舎の人間は都会のことも知ろうとするw

44デフォルトの名無しさん2019/12/03(火) 12:29:35.88ID:Uh1tIUQA
> 逆だよ、都会の人間は都会のことしか知らないし知る必要がない
だから世界が狭くて無知になりやすい

> なぜか田舎の人間は都会のことも知ろうとするw
だから世界が広い

45デフォルトの名無しさん2019/12/03(火) 12:51:15.68ID:dBsSbed7
井の中の蛙 大海を知らず
されど空の蒼さを知る

46デフォルトの名無しさん2019/12/03(火) 13:25:13.55ID:g2sdmHcp
C言語が出来た時の時代を考えれば十分

「変数名に日本語が使えない言語は糞」
って時代もそのうち来るよ

47デフォルトの名無しさん2019/12/03(火) 19:14:24.81ID:90Sp73uq
>>44
残念ながらそうはなってないんだなw
狭く深くっていう世界だから
要するに田舎でな何をするにもオーバーヘッドが大きいってことな
今はネットでだいぶマシになったけどネット以前の情報収集考えたらアホでもわかる話

48デフォルトの名無しさん2019/12/08(日) 02:33:17.34ID:aqWVKWA+
アホなデータ食わせるアホなやつのために堅牢な仕組みにする必要はない

49デフォルトの名無しさん2019/12/11(水) 01:29:51.60ID:7IDmuKiG
>>41
元々は9bit

50デフォルトの名無しさん2019/12/11(水) 06:55:08.36ID:IbA4V9X0
>>46
メモリが640kバイトしか使えなかった頃からのものだしな

51デフォルトの名無しさん2019/12/11(水) 07:59:10.55ID:yA/FdCBI
>>5
ストラトック

52デフォルトの名無しさん2019/12/11(水) 15:20:43.27ID:JkExA39E
大昔って端末やエディタなんかでも1行256とか1024バイト程度しか扱えなかったばず

53デフォルトの名無しさん2019/12/11(水) 15:32:22.68ID:8OP/pbId
256 の時代は割と長かった希ガス

54デフォルトの名無しさん2019/12/13(金) 06:37:32.10ID:o1f1J6fH
昔は1行の長さを先に決めてファイルをクリエイトしました
途中で変更はできません

55デフォルトの名無しさん2019/12/14(土) 13:26:55.02ID:TlZt0bii
関数そのものじゃないが
breakにラベル指定出来なかったのは設計ミスやろ

56デフォルトの名無しさん2019/12/14(土) 13:54:03.80ID:JwYnIOEa
その為のgoto

57デフォルトの名無しさん2019/12/14(土) 22:43:29.04ID:8CJijD11
gotoはラベルのスコープが広いから使いにくい。ループごとに別のラベル名を
付けないといけないし、ラベル名を別のループ用のものと書き間違えると
意図しない所へ飛んで行ってしまう。スパゲッティでバグの元。

ループにラベルを付ければ、スコープがそのループ内に限定され、そのループの
外にある別のループに同じラベル名を付けることができるから、書きやすく
読みやすい。例えば、こんな感じ。

for @outer (i = 1; i <= 3; i++) {
  for (j = 1; j <= 3; j++) {
    printf("%d, %d\n", i, j);
    if (i * j > 3) break @outer;
  }
}
for @outer (i = 1; i <= 5; i++) {
  for (j = 1; j <= 5; j++) {
    printf("%d, %d\n", i, j);
    if (i * j > 5) break @outer;
  }
}

58デフォルトの名無しさん2019/12/14(土) 22:45:51.60ID:JwYnIOEa
単純に
breakする数を指定出来るだけで良い

59デフォルトの名無しさん2019/12/15(日) 06:50:28.91ID:6aWNd1w0
>>58
ネストの数を数えるとか最低だと思う

60デフォルトの名無しさん2019/12/15(日) 07:00:06.17ID:a0yEED8b
1000行のコードでbreak 7;とかされても、
どこに抜けるかわからんよな!

61デフォルトの名無しさん2019/12/15(日) 09:51:38.77ID:5sPbacoo
ネストの数がわからないような巨大な構造は
それだけで最低だ
そんなんだと名前付きループにした所で
@outerなんて名前が使い回されて
同じ名前のループがネストされて
それこそ難読コードになる
それならユニークなラベルによるgotoの方が良い

>>57くらいのループなら
break 2;
は名前を考える手間が無くて楽だし
見にくくもない

62デフォルトの名無しさん2019/12/15(日) 09:57:28.64ID:5sPbacoo
とは書いたけど
どっちも有るならどっちも欲しい

どっちかだけげならbreak 2;の方が欲しい
って感じ

63デフォルトの名無しさん2019/12/15(日) 10:52:04.89ID:6aWNd1w0
>>61
> そんなんだと名前付きループにした所で
> @outerなんて名前が使い回されて
> 同じ名前のループがネストされて
> それこそ難読コードになる
無能の妄想w

64デフォルトの名無しさん2019/12/15(日) 11:05:09.82ID:5sPbacoo
ループの先頭、ループの終わり、break部分
3箇所見ないとダメってだけでダメな仕様

65デフォルトの名無しさん2019/12/15(日) 12:32:17.60ID:bDjAMWVj
>>64
なぜか自分の前提は
> >>57くらいのループなら
なのにラベルにした途端にループの頭とbreakとループの終わりが一瞥でわからないとかアホすぎ

66デフォルトの名無しさん2019/12/15(日) 12:36:08.74ID:5sPbacoo
大きければgoto
小さければbreak n

67デフォルトの名無しさん2019/12/15(日) 12:38:50.49ID:5sPbacoo
名前を付ける手間を許容するならgotoという解決法が既にある

68デフォルトの名無しさん2019/12/15(日) 13:48:44.02ID:o9m7qUoD
>>60
ネスト変わるような変更あるたびにbreakの引数勝手に書き換えてくれるエディタとかマクロが流行る

69デフォルトの名無しさん2019/12/15(日) 16:33:57.62ID:bDjAMWVj
>>67
ifとgotoあるからforもwhileもdoも要らんという主張か
本物のプログラマーだなw

70デフォルトの名無しさん2019/12/15(日) 16:52:03.21ID:u46gpj2V
歪んだ教育のせいで
gotoに拒絶反応を示す人が多いんだよな

2重ループを抜けるなら素直にgotoを使えって

71デフォルトの名無しさん2019/12/15(日) 16:53:29.68ID:pTp+dpJs
アセンブラの
jmp 1f
とかを C でやりたいという話なのか?
やってみりゃいいじゃん。プリプロセッサの出力を処理すればいい。
1 パスで出来ると思うよ。
ひょっとしてもう誰かがやってるかも。

72デフォルトの名無しさん2019/12/15(日) 18:05:59.04ID:5sPbacoo
for (i = 1; i <= 3; i++) {
  for (j = 1; j <= 3; j++) {
    printf("%d, %d\n", i, j);
    if (i * j > 3) goto outer;
  }
} outer:;

73デフォルトの名無しさん2019/12/15(日) 18:58:38.98ID:5sPbacoo
for (i = 1; i <= 3; i++) {
  for (j = 1; j <= 3; j++) {
    printf("%d, %d\n", i, j);
    if (i * j > 3) goto outer;
  }
}
printf("complete\n");
outer:;

74デフォルトの名無しさん2019/12/15(日) 19:01:19.97ID:5sPbacoo
わざわざ言語拡張しなくても
>>57以上の事が実現出来る

75デフォルトの名無しさん2019/12/16(月) 09:05:52.89ID:AI1GDY0I
ラベルのスコープを狭くしたいという話のようだから
マクロの中で使ってこそ真価を発揮するんじゃないかな。
フル仕様のパースが必要というわけではなく、かなり手抜きできそうではある。
あれば便利というのは否定しないが、C でそこまで必要かというと…

76デフォルトの名無しさん2019/12/16(月) 12:33:03.93ID:0jmxiGrg
{
goto hoge;
hoge:;
}
{
goto hoge;
hoge:;
}
これで二重になってたら困るしある意味なってなくても困るな

77デフォルトの名無しさん2019/12/16(月) 13:21:05.83ID:ZZ8St2Js
マクロで二重以上のループってのもなかなか考えづらいなあ

一応、ラベル名をパラメータとする手もある

使う側のコストを考えるとgotoの為にパラメータを増やさないよな
gotoを使わない主義者がよくやってるように
余分な変数を使って実装するんだろうね

78デフォルトの名無しさん2019/12/16(月) 13:23:11.26ID:ZZ8St2Js
アセンブラだとマクロローカルラベルってのがあったりする
ラベルを頻繁に使うので

あと
@@/@b/@fのように、
直近のラベルを指定する仕組みもある

79デフォルトの名無しさん2019/12/16(月) 13:28:49.41ID:ZZ8St2Js
>>72 >>73 みたいなのって
gotoの使いどころだと思うんだけだ
gotoを使わない人はどう書いてるの?

特に >>57 の答えを聞いてみたい

80デフォルトの名無しさん2019/12/16(月) 15:17:28.75ID:arH1mwfY
void print_data(void) {
 for (i = 1; i <= 3; i++) {
   for (j = 1; j <= 3; j++) {
     printf("%d, %d\n", i, j);
     if (i * j > 3) return;
   }
 }
}
print_data();
printf("complete\n");

81デフォルトの名無しさん2019/12/16(月) 16:34:59.64ID:/0yHEQmX
outer より後に処理が続く場合は?

82デフォルトの名無しさん2019/12/16(月) 16:51:44.02ID:arH1mwfY
void print_data(void) {
 for (i = 1; i <= 3; i++) {
   for (j = 1; j <= 3; j++) {
     printf("%d, %d\n", i, j);
     if (i * j > 3) return;
   }
 }
}
print_data();
outer より後に処理が続く場合
printf("complete\n");

83デフォルトの名無しさん2019/12/16(月) 16:55:03.26ID:arH1mwfY
"短い処理"をいちいち関数にしなくて済むから、break 2とかはあってもいいが、
長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない


lud20191216171207
このスレへの固定リンク: http://5chb.net/r/tech/1574306624/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C言語の設計ミスった危険な関数トップ10決めようぜ 」を見た人も見ています:
三峡ダム危険水位上回り設計最高に迫る。それでは八代亜紀さんに歌っていただきましょう「雨の慕情」
【アッコにおまかせ!】カンニング竹山 山P自粛処分めぐる論調に警鐘「イエスかノーかで決めようとするから危険」 [爆笑ゴリラ★]
危険すぎるスマホ依存 長文読めず、言語能力は2歳児レベルに
【注意喚起】危険すぎるスマホ依存 長文読めず、言語能力は2歳児レベルに(2900文字の記事です)
【注意喚起】危険すぎるスマホ依存 長文読めず、言語能力は2歳児レベルに(2900文字の記事です)★3
【🚌】識者「事故は道路の設計ミスが原因」 遺族、NEXCO中日本に訴訟待ったなしか
博多ラーメン「一蘭」が北海道に初進出、玄関の設計ミスで開業と同時に廃墟ビルになった「ノルベサ」
【Verilog】 記述言語で論理設計Project13 【VHDL】
【Verilog】 記述言語で論理設計Project14 【VHDL】
【アメリカ】「12~13歳の男の子に同性愛の性行為をさせるように設計されている」と同性愛を扱った図書館の本を燃やした男 [10/21]
【新国立競技場】 民主党「東京五輪のザハ案が設計コンペで決まったのは民主党政権だけど、蓮舫氏をトップに政府の方針を追及するわ!」
【話題】 「絶対に~」「必ず~」が口癖になっている人は危険!? うつ病の人は「鬱語」を話していることが言語分析で判明![02/22] ©bbspink.com
新型肺炎の世界的危険度、最初から「高い」だった…WHO「事務的ミス」
トイレが外から「丸見え」に 北大、改修工事で設計ミス...「配慮足りなかった」と対応へ [きつねうどん★]
ジャップサッカー代表のファウルが酷すぎるんだが…2人がかりで相手を背中から突き飛ばす、超危険技脇固めを決めるetc
【悲報】青信号と同時に急発進し対向車より先に右折、対向車の左折に被せるように右折…日本、危険運転だらけの劣等国だった
東工大教授「山本太郎が政権をとったらヒトラーのように…」 ネット「実績もないし思考回路も低レベルだけど危険思想だけは並ぶ男
チンコにとって危険な体位トップ3が発表される 1位.バック 2位.正常位 3位.騎乗位
【悲報】危険が迫った時、逃げ出すようでは駄目だ。かえって危険が二倍になる。しかし…
【Microsoft】「BlueKeep同様に危険」なリモートデスクトップサービスの脆弱性修正の早期適用を呼び掛け
【ファッション】エッチな豆知識 大事な彼女には天然シルクのパンティーをはかせよう!でないと病気の危険が…[11/05] ©bbspink.com
高3の受験生だが人生設計ミスってオワタ☆
【速報】台湾脱線事故の車両に設計ミス 製造元の日本企業が発表
台湾脱線事故の車両に設計ミスと発表(日本車両製造) 安全装置切っても司令部に伝わらず。
ホテルのポットやコップを使うのは危険だった
パチスロ6号機「Re:ゼロから始める異世界生活」が設計ミス級のすごい出玉だと話題!いそげ!
◆F1トップチーム「日本の放射能汚染食材は危険」◆
【中国サイト】30分で地球壊滅?米誌が選んだ世界で最も危険な原子力潜水艦トップ5
【悲報】九州で太陽光発電で電力が100%賄えるようになり太陽光発電禁止へ!「原発と比べて故障しやすい危険な電源」
【社会】「トップを死刑や無期懲役に」異例の極刑言及 警察庁長官、特定危険指定暴力団・工藤会の壊滅へ決意を語る
【米陸軍】エスパー国防長官が陸軍トップ時代に作らせた報告書「在韓米軍もはや不要」 韓国外交重鎮は危険な米中二股外交を助言 [納豆パスタ★]
Macの本体標準 FireWireポート、設計ミス!!
プリウスのシフトレバーがこちら 完全に設計ミスだろこれ
【芸能】真木よう子、危険な酒癖の悪さ…ほかの俳優から疎まれる理由
C言語で関数を書いていくスレ
最長不倒関数■C言語でmain関数に全コードを入れる
【悲報】西日本で野良猫に咬まれた女性、死ぬ みんなでこの危険な殺人害獣を駆除しよう [無断転載禁止]
【悲報】PCデポ「LINEをお使いの方、このような画面になっていませんか?危険なので今すぐご相談ください!」
【速報】松山市内の16万人余に避難指示 土砂災害のおそれ 直ちに危険な場所から全員避難するように [豆次郎★]
【IT】Swiftがトップ10入り、Pythonは3位から4位へ--10月TIOBEの人気言語ランキング
【悲報】日本人さん…外国人よりも危険な犯罪民族だった…日本人は外国人の2倍危険
【調査】ママチャリで遭った危険な運転は? [無断転載禁止]
設計・命名スレ
関数型プログラミング言語Haskell Part30
オブジェクト指向システムの設計 173
アーキテクチャ設計, 処理方針, 規約設計など
【DDD】ドメイン駆動設計【エリック・エヴァンス】
関数型言語一般 [無断転載禁止]
【プログラミング】止まらないC言語の下落 - 12月言語ランキング [無断転載禁止]
関数型言語ML (SML, OCaml, etc.), Part 6
関数型言語ML (SML, OCaml, etc.), Part 8
【Microsoft】Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定 [少考さん★]
オブジェクト指向のディレクトリ構造の調査と設計
2010年代の名曲を決めようぜ
2017年もっとも「商業的に失敗だった作品」を決めよう
謎の言語の書かれたノート拾った [無断転載禁止]
いい加減Berryz工房の名曲を決めようぜ
ここらで一度、どのシャーペンが最強か決めようぜ
日本代表オールタイムベスト15決めようぜ
ドラえもん(のぶ代限定)映画のナンバーワン決めようぜ
関数型プログラミング言語Haskell Part34 (667)
02:51:45 up 81 days, 3:50, 0 users, load average: 16.09, 17.43, 18.75

in 0.016809940338135 sec @0.016809940338135@0b7 on 070715