X



C言語なら俺に聞け 151

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ cf8f-fy95)
垢版 |
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0
!extend:checked:vvvvv:1000:512
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/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0004デフォルトの名無しさん (ワッチョイ 1f19-9gjM)
垢版 |
2019/04/02(火) 16:37:14.52ID:VBVVrqHU0
前スレ977のリンクが404ぽいので
魚拓から復元してみた
https://ideone.com/IhBGrr

977 名前:デフォルトの名無しさん (アウアウエー Sa3f-XwTE)[] 投稿日:2019/04/01(月) 21:33:02.04 ID:v6mAk26Pa [1/3]
「要素型がint型で要素数がnの配列を受け取って、
全要素に添字と同じ値を代入する関数set_idx」を作成しました。
http://codepad.org/krsZoljq

配列aの要素数はマクロ定義で#define NUMBER 10とし、
問題なく動作しました。
ところが、この要素数10を60に書き換えてみたところ、
コンパイルされたexeファイルを実行しても動作しません。
コンパイラはMinGW(gcc)です。
思い当たる原因を教えていただけないでしょうか。
0005前スレ977 (アウアウエー Sa3f-XwTE)
垢版 |
2019/04/02(火) 20:52:18.32ID:JwQjLW9ya
>>4
codepadが消えてしまっていたのですね、
復元ありがとうございます。
当初は16行目を
int a[] = {0};
と書いていたため上手く動作せず質問した次第です。

前スレで色々とレス頂きありがとうございました。
プログラムを書く際にバッファオーバーランの危険性を考慮する必要があることすら知らないレベルなので、
メモリの使い方を念頭において学習していきます。
C言語は諦めた方がよいというレスもありましたが、
センスがないのは重々承知の上で、腹を括って勉強していくつもりです。
0006デフォルトの名無しさん (ワッチョイ 0f8f-068C)
垢版 |
2019/04/03(水) 00:01:40.97ID:qKRJca2S0
>>5
いえ
すみません

「呼び出し元で配列長を管理出来ている。問題はない」と言いうるようです /* むしろ free し忘れる方が問題か */
誤解・不適切な部分があったこと、申し訳なく存じます

色々大変かも知れませんが、頑張ってください
0009デフォルトの名無しさん (ワッチョイ 1f19-9gjM)
垢版 |
2019/04/03(水) 17:06:47.20ID:jUO0vRXi0
全く以てくだらんな
何言語だろうが関係ねえ話で
習得できなかったやつの言い訳を集めただけの駄文だ

もし「初心者」がここを見ているなら一言いいたい
【 あ ん な の 忘 れ ろ 】
プログラム言語に限らず人生すべてに影響する有害な集団催眠だ
0010デフォルトの名無しさん (ワンミングク MMbf-QHAD)
垢版 |
2019/04/03(水) 19:21:17.48ID:6tuZKWrYM
既存のソフト(dll)を引き継いだのですが、そのdll内でバイナリファイルをリードしています。
_open(xxx, _O_BINARY, _S_IREAD) しているのですが、複数のプロセスが同じタイミングでアクセスしても排他処理されないですよね?
どうもうまく読めてないのが原因かもしれない障害が発生して困っています。
どうすれば排他処理できるでしょうか。
0014デフォルトの名無しさん (ワンミングク MMbf-QHAD)
垢版 |
2019/04/03(水) 20:30:58.20ID:6tuZKWrYM
レスありがとございます。
後だしですが、書き込みはされないです。そこまでかんがえてなかったですが。
リードだけなら大丈夫そうですね。だったら他のとこに問題があるのかな・・・
0015デフォルトの名無しさん (アウアウウー Sa0f-dxKi)
垢版 |
2019/04/03(水) 20:57:30.11ID:GUjlsyjta
ファイル書いてる最中に読まないようにそのライブラリを使う側と書き込みする側のプログラムでロック掛けるようにするぐらいしか方法ないのでは?
ライブラリのソースもあって自分でも直せるというのなら自分でその辺改造しちゃえば良いんだろうけど。それだったらわざわざここに質問書かんよな?
0020デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/08(月) 10:46:04.23ID:slzfC4/wa
ここどう?
https://www.jdoodle.com/
色んな言語使えるようだ。もちろんCもある。
0023デフォルトの名無しさん (ワッチョイ 7d02-w1lf)
垢版 |
2019/04/08(月) 20:55:25.55ID:26lZNeBT0
セキュリティの為にfoo_sが推奨されてるんだから、ガッコウのコードの方を変えるべきでは?
何年経ったと思ってるんだ。
0025はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/08(月) 21:17:15.17ID:TICLg0mt0
>>23
_s 系の関数って言語仕様上はオプショナルでしょ。
安全でない関数の中で明確に仕様から削除されたのは
gets だけのはずだし、もちろん、安全性を意識させるのは
望ましいけど、どこでも _s 系の関数を使えるわけじゃない。

あくまでもオプショナルだから >>22 は「実装って」という聞き方をしているのだと思うぞ。
0026 ◆mxojKcXMM. (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 22:00:58.21ID:PMJ1/1Ak0
>>25
Microsoft のコンパイラ以外では使えない、と聞いているのも納得がいかないのです、本当によいものなら、なぜ _s 系が移植されないのでしょうか…
0028 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 22:27:24.57ID:PMJ1/1Ak0
>>27
失礼。>>26>>22 への直接または間接の回答を意図しておりません
とある「有用な」実装が広く使われるべき、という意見に対して、microsoft のコンパイラ環境でしか使えない実装を教育目的で強要してもいいのか、というか、そもそもそんなに「有用」な実装なのですか?本当ですか?
という視点で >>22 を強く批判する内容です
0029はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/08(月) 22:35:39.51ID:TICLg0mt0
>>28
_s 系の関数はオプショナルとは言えども規格にある存在なので、
Visual C++ は例のひとつとして挙がっているにすぎません。
間違いなくありがちな問題を軽減しますので、
使える処理系ならば使うように誘導するのは合理的です。
0030 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 23:24:16.54ID:PMJ1/1Ak0
>>29
お手数をおかけし恐縮ですが
「規格にある存在」というその規格をご教示願えますか?
手元にある ISO/IEC 9899:1999 には見えないようですが…
0036デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/09(火) 07:47:37.12ID:lax+sHP30
>>22
> fprintf_s みたいな
> foo_s 系の関数実装って増えてるん?

「いや増えてない」←わかる
「俺は foo_s みたいな関数が嫌い」←わかる
「俺は foo_s みたいな関数が嫌いだから >>22 を強く批判する」←全く分からない

誰か解説してくれるのだろうか



私は「ガッコウのセンセイ」でもないし「ガッコウの教材」の著者でもないから何とも
新学期だから知恵袋とかに質問増えそうじゃん?
0041デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/09(火) 13:13:25.92ID:xq+Mg1lAa
漢なら localtime_r()
0053 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/09(火) 21:52:14.86ID:ssMdw0XF0
>>33
実は K&R2 のみが正義、K&R2 こそ必要にしてかつ十分、という立場なので、そんな私が C99 を推挙した時点で、すでにして大幅に compromise しているつもりなのでした…
0056 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/09(火) 22:25:14.01ID:ssMdw0XF0
>>54
>K&R2って妥協の産物

それも理解できます
K&R2 の最大の改悪部分は「構造体の実体渡しができること」
配列の実体を丸まま関数に渡せないくせに、構造体では出来るって意味わかんない
もしかして
struct S {
int a[65536];
};
とかいう構造体があったら、それを全部スタックに載せるつもりなのか?そういうことをする奴が現れる可能性を考えたのか?と小一時間問い詰めたい気分になりました…
0063 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/10(水) 01:49:22.11ID:57hoitEO0
>>58
構造体といえどもアドレスを渡すのが真に正しく、配列なら言語仕様でそれを強要される、なぜ構造体には甘い顔を見せる必要があるのか?
0064はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/10(水) 04:59:47.74ID:mOo8C1VR0
>>56
極端なことが「できてしまう」のが問題ということですか? そもそも C なんてそんなものでしょう。
状況を見て適当に使い分けるべきで、駄目な使い方をしたら何だって駄目ですよ。
0065デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/10(水) 06:18:28.03ID:qyNiIlQC0
>>63
ド素人の勝手な推測だけれども

「配列だとマジでサイズどんだけか分かったもんじゃないじゃん」
「構造体のメンバ」に配列が来る場合はあるけど、そのサイズは多寡が知れてるじゃん」

という考えかもアリかもしんない
0068デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/10(水) 09:42:54.83ID:G/tPYfHxa
>>56
昔々初心者の頃にやっちゃって物凄く遅くなって気づいた事があったw
0069デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/10(水) 09:49:26.10ID:G/tPYfHxa
構造体も const で渡されたらこっそりポインタ使って読むだけのアクセスするコード作っちゃっても良いのにな。
マルチスレッドで動くプログラムの時に死ぬかも知れんが。
0071デフォルトの名無しさん (ワッチョイ 02a5-lO4n)
垢版 |
2019/04/10(水) 10:42:39.87ID:ryP68qDF0
現代教えられてる言語で60年代中期の古さを引きずってる言語だからだ

配列に対してsize適用すれば長さを取れるのは現代じゃあ普通で、
取れないC言語のほうがおかしい、
これ、誤解でも何でもないからな
0073デフォルトの名無しさん (ワッチョイ 912d-iMOx)
垢版 |
2019/04/10(水) 11:14:25.33ID:9YALwuYf0
>>58
事実上、構造体はほとんどの場合ポインタで渡すよな
実体で渡すという特殊なケースがデフォになってて
ポインタで渡すという主要な使い方でアドレス演算子が必須って
おかしくね?
■ このスレッドは過去ログ倉庫に格納されています

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