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言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 145
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9381-qput)
2018/02/19(月) 22:13:58.98ID:9/te2eSJ0102デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/24(土) 23:34:03.13ID:PDjCLuF50 一致した行をそのままファイルに書き出す方が簡単な気がする
103デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 01:42:29.02ID:XjF3qDop0104デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 01:43:39.45ID:XjF3qDop0 >>101
てか、やり直しができないってどういう意味?幾らでもできると思うが。
てか、やり直しができないってどういう意味?幾らでもできると思うが。
105デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/25(日) 01:50:49.81ID:I4H7O+d10 1バイトでもメモリ消費量を節約する事が求められた世代と
湯水の如く無尽蔵にメモリが使える世代のバトルが始まる?
湯水の如く無尽蔵にメモリが使える世代のバトルが始まる?
106デフォルトの名無しさん (ワッチョイ df9f-IDeO)
2018/02/25(日) 03:25:39.33ID:XjF3qDop0 >>105
そういうことなの?w
そういうことなの?w
107デフォルトの名無しさん (ワッチョイ 2f93-IXLF)
2018/02/25(日) 06:04:48.57ID:Jqo0wCIZ0 >>92 >>94
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
の行では input[BUF_SIZE] で BUF_SIZE が80であることから
format[] に "%79s%*[^\n]%*c" (\nは改行コード) が格納される。
よって scanf(format, input); は scanf("%79s%*[^\n]%*c", input); の動作。
変換指定の "%79s%*[^\n]%*c" の意味や妥当性は別のお話。
>>96
scanf() の変換指定文字列を sprintf() で生成するやり方は
『プログラミング作法』(カーニハン&パイク)に載ってる。
BUF_SIZE の定義を変えたときにscanf()の変換指定の文字数指定部分も
自動的に追随させる便法(片方だけ修正忘れの防止)として、悪くないかと。
バッファサイズは固定なのに変換指定を動的に作るのは非効率だ、
という気持ちも分かるけどね。
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
の行では input[BUF_SIZE] で BUF_SIZE が80であることから
format[] に "%79s%*[^\n]%*c" (\nは改行コード) が格納される。
よって scanf(format, input); は scanf("%79s%*[^\n]%*c", input); の動作。
変換指定の "%79s%*[^\n]%*c" の意味や妥当性は別のお話。
>>96
scanf() の変換指定文字列を sprintf() で生成するやり方は
『プログラミング作法』(カーニハン&パイク)に載ってる。
BUF_SIZE の定義を変えたときにscanf()の変換指定の文字数指定部分も
自動的に追随させる便法(片方だけ修正忘れの防止)として、悪くないかと。
バッファサイズは固定なのに変換指定を動的に作るのは非効率だ、
という気持ちも分かるけどね。
108デフォルトの名無しさん (ワッチョイ 8a15-x4Or)
2018/02/25(日) 07:37:51.66ID:HIxgC6KA0 片山氏はscanfがまともに使えず
自分のミスを道具のせいにする手合いか
自分のミスを道具のせいにする手合いか
109デフォルトの名無しさん (ブーイモ MM5e-1x+Q)
2018/02/25(日) 08:49:08.43ID:vTPpNH4CM110デフォルトの名無しさん (ワッチョイ 2f93-IXLF)
2018/02/25(日) 09:18:29.86ID:Jqo0wCIZ0 >>109 「冪等性がない」の意味を補足してくれまいか。
realloc()に冪等性がない、結果整合性はある、という意味が分からないのだ。
realloc()に冪等性がない、結果整合性はある、という意味が分からないのだ。
111デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)
2018/02/25(日) 09:35:20.85ID:miEl51/Z0 失敗したとき NULL を返しつつ 「引数で渡したポインタは開放されない」
あたりに引っかかりを感じてるんでない?
NULL 返すなら 引数で渡したポインタを開放しろと?
※ 使いにくいかもなぁ…
あたりに引っかかりを感じてるんでない?
NULL 返すなら 引数で渡したポインタを開放しろと?
※ 使いにくいかもなぁ…
112デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 11:58:37.90ID:XjF3qDop0 俺も意味がわからん。
113デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 12:17:48.32ID:XjF3qDop0 >>111
それはメモリ確保に失敗してるんだから解放したらダメだよね。
自分で malloc() 使って新規にメモリ確保しようとした場合でも NULL 返されたら元の方は free() しないだろう。
それはメモリ確保に失敗してるんだから解放したらダメだよね。
自分で malloc() 使って新規にメモリ確保しようとした場合でも NULL 返されたら元の方は free() しないだろう。
114デフォルトの名無しさん (ブーイモ MM5e-1x+Q)
2018/02/25(日) 12:28:06.03ID:vTPpNH4CM115デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 12:33:20.87ID:XjF3qDop0 あ、もしや >>109 の言ってる冪等性がないって引数で渡したポインタとは違うポインタを返してくることがあるって意味?
あまりにも当たり前すぎて思いつかなかったが。
しかし malloc() の実装にもよるだろうがこれを許さないと効率は悪くなるのではないか?
あまりにも当たり前すぎて思いつかなかったが。
しかし malloc() の実装にもよるだろうがこれを許さないと効率は悪くなるのではないか?
116デフォルトの名無しさん (ブーイモ MM5e-1x+Q)
2018/02/25(日) 13:13:10.59ID:vTPpNH4CM >>115
そう
違うアドレスを返して初めて発現するバグをボケナスビがやらかしてから俺は戒律で禁じた
他にも初期化やアライメントの点もある
メモリ効率を重視するなら自分で管理構造作るべきだと思ってる
冪等性を最重視する俺はこのスレじゃ少数派みたいだからあまり気にせんでくれ
そう
違うアドレスを返して初めて発現するバグをボケナスビがやらかしてから俺は戒律で禁じた
他にも初期化やアライメントの点もある
メモリ効率を重視するなら自分で管理構造作るべきだと思ってる
冪等性を最重視する俺はこのスレじゃ少数派みたいだからあまり気にせんでくれ
117デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/25(日) 13:20:16.07ID:L5EpKLxx0118デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/25(日) 13:22:50.04ID:I4H7O+d10 (流れが質問者を放置しているように感じる)
119デフォルトの名無しさん (ワッチョイ c2f9-2orQ)
2018/02/25(日) 13:26:41.23ID:qARxqxts0120デフォルトの名無しさん (ブーイモ MM5e-1x+Q)
2018/02/25(日) 13:38:08.00ID:vTPpNH4CM >>103 >>104
c++ には realloc() は取り入れられなかった
ちょっと例が悪いが
concat3(char *a, char *b, cha *c) 文字列a と 文字列b と文字列c を連結して文字列a に返す関数を書こうとする
ここで 2 回の realloc() を行うとする
1 回目の realloc() は成功するが、2回目の realloc() は失敗したとする
このとき「関数 concat3() が失敗したときは状態は不変、成功したときだけ状態を変更する」という原則を満たせない
我ながらちょっと例が悪いとは思うが、
realloc() を暢気に使っていると、エラー処理が一手ばったりになってしまう。
c++ には realloc() は取り入れられなかった
ちょっと例が悪いが
concat3(char *a, char *b, cha *c) 文字列a と 文字列b と文字列c を連結して文字列a に返す関数を書こうとする
ここで 2 回の realloc() を行うとする
1 回目の realloc() は成功するが、2回目の realloc() は失敗したとする
このとき「関数 concat3() が失敗したときは状態は不変、成功したときだけ状態を変更する」という原則を満たせない
我ながらちょっと例が悪いとは思うが、
realloc() を暢気に使っていると、エラー処理が一手ばったりになってしまう。
122デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/25(日) 13:49:23.19ID:L5EpKLxx0 >>120
俺はいいと思うぞ。
むしろ無理に「質問者様が神様だ」的にしたがるゆとりは死ねと思うが。
そもそも質問には回答つきまくってるし、質問者側が何らかの反応しないと話は進まないだろ。
流れも読めない癖に流れを主張するゆとりは殺すしかない。
俺はいいと思うぞ。
むしろ無理に「質問者様が神様だ」的にしたがるゆとりは死ねと思うが。
そもそも質問には回答つきまくってるし、質問者側が何らかの反応しないと話は進まないだろ。
流れも読めない癖に流れを主張するゆとりは殺すしかない。
123デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/25(日) 14:39:52.01ID:XjF3qDop0 なるほど。まあ確かに使い方や使い所を間違えればハマるものではあるな。
そういや以前 realloc() で渡すポインターがNULLではなくサイズの指定が0だとfree()されるってのでハマったことがあった。w
そういや以前 realloc() で渡すポインターがNULLではなくサイズの指定が0だとfree()されるってのでハマったことがあった。w
124片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-uTGm)
2018/02/25(日) 14:51:26.22ID:nm5odapXd ANSI準拠のreallocは、mallocとfreeの代わりになる。
125デフォルトの名無しさん (ワッチョイ 8a6e-x4Or)
2018/02/25(日) 15:46:21.99ID:s5td7qK+0 未だにANSIの規格票を読んでる日本人いたのか
126デフォルトの名無しさん (ワッチョイ 6e23-Rch6)
2018/02/25(日) 15:51:12.25ID:DMbXpP0c0 俺も読んでる
127デフォルトの名無しさん (アウアウカー Sa11-CD0d)
2018/02/25(日) 15:59:51.76ID:NsuolzGja 未だにANSI使う理由って何だろう?
128デフォルトの名無しさん (ワッチョイ 8a6e-x4Or)
2018/02/25(日) 16:00:08.18ID:s5td7qK+0 ISOではなくANSIか?
129デフォルトの名無しさん (ドコグロ MM02-Y1mi)
2018/02/25(日) 18:48:53.57ID:bdk82RzyM >>121
それはプログラムの組み方が悪いだけでrealloc()のせいじゃないだろ
それはプログラムの組み方が悪いだけでrealloc()のせいじゃないだろ
130デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/25(日) 18:55:32.39ID:I4H7O+d10 >>121
最初から文字列3つ分の領域確保すれば良いんでないの?
最初から文字列3つ分の領域確保すれば良いんでないの?
131デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/25(日) 19:23:06.76ID:L5EpKLxx0 >>121
reallocではなく、自前でmalloc+memcpy+freeでやればいいだけ。
ただその前に、指摘されているとおり、
3つの「同時に変更される」生ポインタを掴ませるのが問題。
その場合には普通は一つの構造体に入れてそれ経由で使い、
「同時に変更される」という条件が外部に見えないようにする。(隠蔽)
勘違いしている奴も多いが、OOPは文法の話ではない。
reallocではなく、自前でmalloc+memcpy+freeでやればいいだけ。
ただその前に、指摘されているとおり、
3つの「同時に変更される」生ポインタを掴ませるのが問題。
その場合には普通は一つの構造体に入れてそれ経由で使い、
「同時に変更される」という条件が外部に見えないようにする。(隠蔽)
勘違いしている奴も多いが、OOPは文法の話ではない。
132デフォルトの名無しさん (ワッチョイ 0637-rG1w)
2018/02/25(日) 20:09:18.52ID:fbPK05Px0 reallocをmallocとmemcpyでやろうとするともとのメモリサイズわからずに詰まない?
133デフォルトの名無しさん (スップ Sdc4-7IFu)
2018/02/25(日) 20:41:49.10ID:p0obWBJzd 結果何をどうすればいいんですか?レベルが高すぎて何を言ってるのかさっぱりです
134デフォルトの名無しさん (アウアウウー Sab5-Oo+E)
2018/02/25(日) 20:48:37.39ID:Fc1MjilIa135デフォルトの名無しさん (アウアウウー Sab5-Oo+E)
2018/02/25(日) 20:58:36.53ID:H8bVBKR7a >>133
reallocに関してはひとまず気にしなくて良いかと
reallocに関してはひとまず気にしなくて良いかと
136デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/25(日) 21:15:09.00ID:I4H7O+d10 >>133
見つかった行の保持ってメモリー上でやりたいの?
見つかった行の保持ってメモリー上でやりたいの?
137デフォルトの名無しさん (ワッチョイ fc9b-7IFu)
2018/02/25(日) 21:58:18.03ID:EC2T/8ze0138デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/25(日) 22:15:41.07ID:I4H7O+d10 メモリ上に保持しなくても良いなら、検索して見つかった行をそのままファイルに書き出してしまう方が簡単だと思う。
あと、どういう環境で実行するか分からないんだが、もしも正規現が使えるなら、それを利用する方が簡単だと思う。
複数のキーワードで探したいときは一括で指定できるし。
あと、どういう環境で実行するか分からないんだが、もしも正規現が使えるなら、それを利用する方が簡単だと思う。
複数のキーワードで探したいときは一括で指定できるし。
139デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/25(日) 22:23:36.04ID:L5EpKLxx0 >>139
>用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
その判断をするのには、一定の C での経験が必要だと思います
python なんかでやったほうがいい仕事をあえて C で書く経験はあったほうがいいでしょう
>用途でC使うとか正気じゃねえ。メモリ上でゴリゴリやるにしても普通はスクリプト言語。
その判断をするのには、一定の C での経験が必要だと思います
python なんかでやったほうがいい仕事をあえて C で書く経験はあったほうがいいでしょう
141デフォルトの名無しさん (ワッチョイ fc9b-7IFu)
2018/02/25(日) 23:44:30.89ID:EC2T/8ze0 VBでは出来るんですがCの勉強をかねてトライしてます。
いろいろとありがとうございました!明日頑張ってみます!
いろいろとありがとうございました!明日頑張ってみます!
142デフォルトの名無しさん (ワッチョイ aab3-Y1mi)
2018/02/26(月) 11:24:56.97ID:0MjsGOBH0143デフォルトの名無しさん (ワッチョイ 66e1-imWJ)
2018/02/26(月) 12:24:58.22ID:4Dp3S/v30 >>142
concat3とかいうQZのボケたろくでもない例のことは忘れろ
concat3とかいうQZのボケたろくでもない例のことは忘れろ
144デフォルトの名無しさん (ワッチョイ 8a05-x4Or)
2018/02/26(月) 12:38:44.35ID:lxlU26hn0145デフォルトの名無しさん (ドコグロ MM36-Y1mi)
2018/02/26(月) 13:29:20.63ID:zI4VKzz4M >>143
お前は何を言ってるんだ?
お前は何を言ってるんだ?
146デフォルトの名無しさん (ワントンキン MMb8-Clm8)
2018/02/26(月) 17:32:30.23ID:e+KVEn7XM K&Rで説明されている筈なんだが
147デフォルトの名無しさん (スップ Sd00-7IFu)
2018/02/26(月) 17:41:14.36ID:vVA9DKIbd 結果出来ませんでした...
148デフォルトの名無しさん (ワッチョイ 0637-rG1w)
2018/02/26(月) 20:20:31.75ID:4PPe6ndQ0 >>144
reallocの作者がmallocの作者と違う場合なんだが
reallocの作者がmallocの作者と違う場合なんだが
149デフォルトの名無しさん (アウアウカー Sa0a-sySv)
2018/02/26(月) 20:38:25.45ID:9Qy36xi2a 違うかなあ?まあ、ソース公開されてれば違う人が書くことは楽だが。
150デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/26(月) 22:00:57.86ID:Z8+ASG310 >>147
どの辺がどうできなかったかを書いてみて
どの辺がどうできなかったかを書いてみて
151デフォルトの名無しさん (ワッチョイ 8a05-x4Or)
2018/02/26(月) 22:08:57.21ID:lxlU26hn0152デフォルトの名無しさん (ワッチョイ fc9b-7IFu)
2018/02/26(月) 23:37:18.28ID:Il2cKkTC0 >>150
単純に自分でやってみようと思い一から書き始めたんですけど
CSVファイルのカンマ区切りで、行は日々増える形式で、13列の固定。それぞれ数字だったり文字だったり混合。
ファイルを開いて読み込んで一行ずつ検索文字列と比較して一致したら表示列を指定して表示させ、一致しなかったら次へを繰り返していこうと思って始めたんですけど。
配列に入らずうまいこといきませんでしたね。ネットの参考もいいのが見つからなくて...
前載せたコードを読みといた方が近道ですかね?
単純に自分でやってみようと思い一から書き始めたんですけど
CSVファイルのカンマ区切りで、行は日々増える形式で、13列の固定。それぞれ数字だったり文字だったり混合。
ファイルを開いて読み込んで一行ずつ検索文字列と比較して一致したら表示列を指定して表示させ、一致しなかったら次へを繰り返していこうと思って始めたんですけど。
配列に入らずうまいこといきませんでしたね。ネットの参考もいいのが見つからなくて...
前載せたコードを読みといた方が近道ですかね?
153デフォルトの名無しさん (ワッチョイ c2f9-2orQ)
2018/02/26(月) 23:49:55.49ID:KRl4xBEA0 >>151
もともと標準mallocやfreeを使って自前realloc作るならという話の流れだっただろ
もともと標準mallocやfreeを使って自前realloc作るならという話の流れだっただろ
154デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/26(月) 23:57:50.74ID:Z8+ASG310 >>152
CSVファイルを読み込むプログラムは作った事ありますが
CSVの仕様をどの位受け入れるかで複雑さも変わると思います。
この辺は汎用的に作るか、自分が処理したいCSVの仕様の範囲にするかで違うとは思います。
scanf系の処理はとても癖が強く、
よっぽど仕様に精通していないと填まります
私ならその道を行くのはやめます
CSVファイルを読み込むプログラムは作った事ありますが
CSVの仕様をどの位受け入れるかで複雑さも変わると思います。
この辺は汎用的に作るか、自分が処理したいCSVの仕様の範囲にするかで違うとは思います。
scanf系の処理はとても癖が強く、
よっぽど仕様に精通していないと填まります
私ならその道を行くのはやめます
155デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/27(火) 00:01:01.54ID:uYnnRgds0156デフォルトの名無しさん (ワッチョイ 3fb3-a3bs)
2018/02/27(火) 00:04:33.43ID:vDZ6bRaj0 "と , のエスケープと 1要素の中に改行を含む文字列周辺 RFCみて頭いたくなった
157デフォルトの名無しさん (ブーイモ MM5a-1x+Q)
2018/02/27(火) 00:13:39.83ID:euQ4hghrM158デフォルトの名無しさん (アークセー Sx5f-jcVR)
2018/02/27(火) 07:16:02.83ID:pdRg+OHax 配列とかポインタとか難しいと聞いていたから心配していたけど
とりあえず基礎の解説書レベルなら分かった。やれやれ。
とりあえず基礎の解説書レベルなら分かった。やれやれ。
159デフォルトの名無しさん (ワッチョイ 7c8a-Clm8)
2018/02/27(火) 09:21:35.76ID:uskldtVs0 指定したサイズの2次元配列を確保する関数を設計してくれまいか?
160デフォルトの名無しさん (ワッチョイ 8a32-x4Or)
2018/02/27(火) 10:07:05.72ID:XfJ/ct090 >>159
無理じゃね?
char (*dim_alloc(size_t width, size_t height))[width];
最後の[width]がエラーになる[*]にしてもあかん
[]にすると通るには通るが、今度は
char (*a)[3][4] = dim_alloc(3, 4); //型の不一致になる
無理じゃね?
char (*dim_alloc(size_t width, size_t height))[width];
最後の[width]がエラーになる[*]にしてもあかん
[]にすると通るには通るが、今度は
char (*a)[3][4] = dim_alloc(3, 4); //型の不一致になる
161デフォルトの名無しさん (ワッチョイ 8a32-x4Or)
2018/02/27(火) 10:08:23.25ID:XfJ/ct090 あ、失礼
char (*a)[4][3] = dim_alloc(3, 4);
結果は同じだけど
char (*a)[4][3] = dim_alloc(3, 4);
結果は同じだけど
162デフォルトの名無しさん (ワッチョイ 8a32-x4Or)
2018/02/27(火) 10:55:55.07ID:XfJ/ct090 できた
void dim_alloc(size_t, size_t, char (**b)[*]);
int main(void)
{
size_t width = 3, height = 4;
char (*a)[width];
dim_alloc(width, height, &a);
}
void dim_alloc(size_t width, size_t height, char (**b)[width])
{
*b = (char (*)[width])malloc(width * height);
}
これならおk
void dim_alloc(size_t, size_t, char (**b)[*]);
int main(void)
{
size_t width = 3, height = 4;
char (*a)[width];
dim_alloc(width, height, &a);
}
void dim_alloc(size_t width, size_t height, char (**b)[width])
{
*b = (char (*)[width])malloc(width * height);
}
これならおk
163デフォルトの名無しさん (アウアウカー Sa0a-sySv)
2018/02/27(火) 11:45:45.08ID:r7ed+pq5a ポインタの配列使っちゃえばいいじゃん。free()する時注意が必要だがアクセスがa[y][x]形式なのは同じだし。
164デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/27(火) 11:48:09.27ID:w9pRJ3lK0 二次元配列とポインタの配列だと、使い方が違うでしょう
165デフォルトの名無しさん
2018/02/27(火) 12:21:42.40 mallocされたサイズが分からんとか何言ってるの?
gccもVCも確保サイズを返す関数を提供してるだろ
gccもVCも確保サイズを返す関数を提供してるだろ
166デフォルトの名無しさん (アウアウカー Sa0a-sySv)
2018/02/27(火) 12:27:42.17ID:r7ed+pq5a >>164
確保時と解放時が違うが読み書きアクセスする時の表現は同じにできる。
確保時と解放時が違うが読み書きアクセスする時の表現は同じにできる。
>>159
gcc6 では一筋縄ではいかなくなっているね…
gcc6 では一筋縄ではいかなくなっているね…
168デフォルトの名無しさん (ワッチョイ 8a32-x4Or)
2018/02/27(火) 12:35:33.45ID:XfJ/ct090 >>165
非標準のね
非標準のね
171デフォルトの名無しさん (アウアウウー Sa83-x4Or)
2018/02/27(火) 18:07:21.76ID:BEzsaLeta ああ。先頭にポインタを詰め込んで一発で全部free()できるようにしたのか。
172デフォルトの名無しさん (ドコグロ MM2e-Y1mi)
2018/02/27(火) 19:24:56.97ID:LuvO3mbWM >>165
非標準だし、そもそもそんなものを使う必要は滅多にない
非標準だし、そもそもそんなものを使う必要は滅多にない
173デフォルトの名無しさん
2018/02/27(火) 19:27:39.38 >>168,172
上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があったから、普通は処理系で専用関数を提供してるだろって話
上の方でmalloc作者じゃなきゃrealloc作れないっていう主張があったから、普通は処理系で専用関数を提供してるだろって話
174デフォルトの名無しさん (ワッチョイ 2f93-IXLF)
2018/02/27(火) 19:47:16.45ID:jvpYfXKk0 >>159
わざわざ関数を設計しなくても、例えば3次元配列なら
int ary[dim_z][dim_y][dim_x];
int (*ptr)[dim_y][dim_x] = malloc(sizeof(int) * dim_z * dim_y * dim_x);
とやれば ary と ptr は同等に扱えないかな。
ptrはfree()する必要があること、sizeofの対象にしたとき同じ値を返さないことは
別関数を作っても同じだし。
わざわざ関数を設計しなくても、例えば3次元配列なら
int ary[dim_z][dim_y][dim_x];
int (*ptr)[dim_y][dim_x] = malloc(sizeof(int) * dim_z * dim_y * dim_x);
とやれば ary と ptr は同等に扱えないかな。
ptrはfree()する必要があること、sizeofの対象にしたとき同じ値を返さないことは
別関数を作っても同じだし。
175デフォルトの名無しさん
2018/02/27(火) 19:54:46.22 >>159は二次元配列を確保とは言っているがインタフェースは特に注文ないんだからxとyと型サイズを掛けて(必要ならアラインメント考慮も入れて)mallocしてvoidポインタを返せばいいよな
176デフォルトの名無しさん (ワッチョイ 8a32-x4Or)
2018/02/27(火) 20:35:43.21ID:XfJ/ct090 >>174
別関数を作っても同じとは思わないな
void dim_alloc(size_t, size_t, char (**)[*]);
void dim_free(size_t width, char const volatile (*head)[width])
{
free((void *)head);
}
dim_allocが内部的に割り付けに使っている手段を
dim_freeに隠蔽する意味はあるんだから
別関数を作っても同じとは思わないな
void dim_alloc(size_t, size_t, char (**)[*]);
void dim_free(size_t width, char const volatile (*head)[width])
{
free((void *)head);
}
dim_allocが内部的に割り付けに使っている手段を
dim_freeに隠蔽する意味はあるんだから
177デフォルトの名無しさん (ドコグロ MM2e-Y1mi)
2018/02/27(火) 20:42:39.05ID:LuvO3mbWM178デフォルトの名無しさん (アウアウウー Sab5-Oo+E)
2018/02/27(火) 21:38:07.83ID:ejzPWrTva >>177
だから、その主張はおかしいって話の流れだったろ
だから、その主張はおかしいって話の流れだったろ
179デフォルトの名無しさん (アークセー Sx10-jcVR)
2018/02/27(火) 23:15:01.44ID:7DMjjd1qx テトリスのプログラムって難しい方なの?
180デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/27(火) 23:18:17.42ID:w9pRJ3lK0 そんなには難しくはないと思う
作る人がグラフィック処理を理解していて
キー入力のリアルタイム処理をこなせればね
作る人がグラフィック処理を理解していて
キー入力のリアルタイム処理をこなせればね
182デフォルトの名無しさん (アークセー Sx10-jcVR)
2018/02/27(火) 23:26:02.43ID:7DMjjd1qx PetiteTech にあるテトリス
ブロックパズルの作り方 だと これはどうなの?
ブロックパズルの作り方 だと これはどうなの?
183デフォルトの名無しさん (アークセー Sx10-jcVR)
2018/02/27(火) 23:31:30.01ID:7DMjjd1qx 高校生ぐらいが無理なく取り組めるゲームプログラムって
無いですかね?もちろん初心者。
無いですかね?もちろん初心者。
184デフォルトの名無しさん (ワッチョイ d023-MTlB)
2018/02/27(火) 23:54:04.69ID:8YslYmAQ0 パズル系は楽そうに見えるけど、判定部分を作るのがキツいと思う
まずは固定画面でブロック崩し
次は横スクロール画面でスーパーマリオもどきぐらい
描画ライブラリを自作出来なかったら dxlib とかのフリーライブラリが使える
2Dに慣れたらUnityのフリー版で3Dゲーム作ってみるのもいい
まずは固定画面でブロック崩し
次は横スクロール画面でスーパーマリオもどきぐらい
描画ライブラリを自作出来なかったら dxlib とかのフリーライブラリが使える
2Dに慣れたらUnityのフリー版で3Dゲーム作ってみるのもいい
185デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 00:04:51.75ID:8c8qszi40 ここに来て何でこんなに初心者が沸いているのか分からんが、
スレ分けた方がいいんじゃないか?
というか、上級者用のスレがあったら紹介してくれ。俺がそっち行くから。
>>183
高校生なら学校の勉強しとけ。特に数学。
俺はゲーム畑ではないが、今ですらエンジンは統合されつつあり、
フレームワーク化は今後ますます進む。というか、そうならない理由がない。
そのとき、中途半端にCが出来ても使い物にならない。
ゲームプログラミングは上位のフレームワーク上の部分と
下位のゲームエンジンの部分に分離され、Cが担当するのは後者で、
当たり前のように座標を使いこなし、ゴリゴリにチューニングすることが求められる。
つっても通じないだろうが、多分高校生の考えるゲームプログラミングなら、
C#でunity使うのが今風なんじゃね?そっちやっとけよ。
スレ分けた方がいいんじゃないか?
というか、上級者用のスレがあったら紹介してくれ。俺がそっち行くから。
>>183
高校生なら学校の勉強しとけ。特に数学。
俺はゲーム畑ではないが、今ですらエンジンは統合されつつあり、
フレームワーク化は今後ますます進む。というか、そうならない理由がない。
そのとき、中途半端にCが出来ても使い物にならない。
ゲームプログラミングは上位のフレームワーク上の部分と
下位のゲームエンジンの部分に分離され、Cが担当するのは後者で、
当たり前のように座標を使いこなし、ゴリゴリにチューニングすることが求められる。
つっても通じないだろうが、多分高校生の考えるゲームプログラミングなら、
C#でunity使うのが今風なんじゃね?そっちやっとけよ。
186デフォルトの名無しさん (ワッチョイ d023-MTlB)
2018/02/28(水) 00:42:29.18ID:QXjyWHPf0 そもそも枯れた技術のC言語スレで上級者なんているのかな・・・?
188デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 01:07:30.80ID:8c8qszi40 >>186
むしろお前含めて一通りも使えない馬鹿が沸きまくっていることが問題だ。
それでも初心者は初心者同士で好きにやればいいが、
元々居た連中は逃げるしかない。
大体、>>184も間違いだ。
そもそもプログラミングすら出来ない奴がCから始めることが間違っている。
今は昔みたいにCしかない状況ではない。他に適した言語がいくらでもある。
だから「C初心者」は許容するとして、「プログラミング初心者」はお帰りください、でいい。
というか、それが本人の為だ。
「判定部分」は言語に依らない。
だから「判定部分を作るのがキツい」のなら、まずその程度簡単に出来るまで他言語で鍛えろ、でしかない。
それで、速度的に問題がある場合はそこをCに切り替えていくわけでさ。
(俺は使ったこと無いから推測だが、)普通の当たり判定ならエンジン側で当然持ってるだろ。
落ちゲーもそれなりの歴史はあるし、判定ルーチンがエンジンにあってもおかしくない。
そもそもテトリスの判定(一列埋め)が難しいという時点で論外だし。
お前は>>184が本人の為になるとでも思ってるのか?
高校生なら学校のお勉強しとけ、がよっぽどマシだろ。
そもそも高校生が2chするのが間違っていると思うし。
むしろお前含めて一通りも使えない馬鹿が沸きまくっていることが問題だ。
それでも初心者は初心者同士で好きにやればいいが、
元々居た連中は逃げるしかない。
大体、>>184も間違いだ。
そもそもプログラミングすら出来ない奴がCから始めることが間違っている。
今は昔みたいにCしかない状況ではない。他に適した言語がいくらでもある。
だから「C初心者」は許容するとして、「プログラミング初心者」はお帰りください、でいい。
というか、それが本人の為だ。
「判定部分」は言語に依らない。
だから「判定部分を作るのがキツい」のなら、まずその程度簡単に出来るまで他言語で鍛えろ、でしかない。
それで、速度的に問題がある場合はそこをCに切り替えていくわけでさ。
(俺は使ったこと無いから推測だが、)普通の当たり判定ならエンジン側で当然持ってるだろ。
落ちゲーもそれなりの歴史はあるし、判定ルーチンがエンジンにあってもおかしくない。
そもそもテトリスの判定(一列埋め)が難しいという時点で論外だし。
お前は>>184が本人の為になるとでも思ってるのか?
高校生なら学校のお勉強しとけ、がよっぽどマシだろ。
そもそも高校生が2chするのが間違っていると思うし。
189デフォルトの名無しさん (アウアウカー Sa11-CD0d)
2018/02/28(水) 01:09:56.20ID:3MQnmRRma190デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/28(水) 01:15:14.33ID:m1ANm8An0 上級者かそうで無いかは、どの辺で分けるの?
もしかして年齢?
もしかして年齢?
191デフォルトの名無しさん (ワッチョイ d023-MTlB)
2018/02/28(水) 01:20:42.25ID:QXjyWHPf0 ここにいる自称上級者の人達は、C++やC#なら標準で使える様な物を何で再発明しているんだろう?
ポインタ返すだけの関数だとメモリオーバーランが検知出来ないから業務では危なくて使えないし、
バッファへのポインタは別ソース内にstaticで隠蔽してintとかのハンドルだけ返して、
引数範囲チェック付きのget,setと、ハンドルでfreeする関数まで作らないと正解とは言えない
ポインタ返すだけの関数だとメモリオーバーランが検知出来ないから業務では危なくて使えないし、
バッファへのポインタは別ソース内にstaticで隠蔽してintとかのハンドルだけ返して、
引数範囲チェック付きのget,setと、ハンドルでfreeする関数まで作らないと正解とは言えない
192デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 01:45:42.72ID:8c8qszi40 とりあえず他の人の反応見て週末にでも俺が立てるよ。
テンプレは>>1踏襲だが、以下に変える予定。
スレタイ:C言語相談室
C言語の話題のみ取り扱います C++の話題はC++スレへ
上級者専用です。
10,000行程度のソースを取り扱ったことがない人は以下スレへどうぞ。
(このスレ)
>>190他
Cなら10k行で切っても人数集まるんじゃないかな?と思っている。
ゆずって5k行くらいにしとくか?
或いはC++も混ぜとくか?C++スレも「上級者専用にしていいんじゃないか」って話も出てたし。
ポシャったけど。
>>191
そもそもそういう思想ではないし、C++やC#がいいと思うのならそれらを使えばいいだけ。
個人的にはC使いは無駄に頑張りすぎていて、
もうちょっと上手く手抜きをすることも覚えるべきだとは思うが、
わざわざCスレで「何回目だよそれ?」をぶちかますお前も頭おかしいと思う。
テンプレは>>1踏襲だが、以下に変える予定。
スレタイ:C言語相談室
C言語の話題のみ取り扱います C++の話題はC++スレへ
上級者専用です。
10,000行程度のソースを取り扱ったことがない人は以下スレへどうぞ。
(このスレ)
>>190他
Cなら10k行で切っても人数集まるんじゃないかな?と思っている。
ゆずって5k行くらいにしとくか?
或いはC++も混ぜとくか?C++スレも「上級者専用にしていいんじゃないか」って話も出てたし。
ポシャったけど。
>>191
そもそもそういう思想ではないし、C++やC#がいいと思うのならそれらを使えばいいだけ。
個人的にはC使いは無駄に頑張りすぎていて、
もうちょっと上手く手抜きをすることも覚えるべきだとは思うが、
わざわざCスレで「何回目だよそれ?」をぶちかますお前も頭おかしいと思う。
>>192
1万行ですか…気が遠くなりますね…
こんなのなら書いたことがありますが…
https://code.hackerearth.com/431130T
https://code.hackerearth.com/7b7b82s
1万行ですか…気が遠くなりますね…
こんなのなら書いたことがありますが…
https://code.hackerearth.com/431130T
https://code.hackerearth.com/7b7b82s
194デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/28(水) 01:54:28.86ID:ifAjmiIg0195デフォルトの名無しさん (ワッチョイ df9f-x4Or)
2018/02/28(水) 01:57:04.78ID:ifAjmiIg0 あ、ごめん。リロードしてなかった。そういうテンプレは入れてないな。
じゃあ俺の作った方は放置でいいよ。新しいのできたら削除依頼しとこう。
じゃあ俺の作った方は放置でいいよ。新しいのできたら削除依頼しとこう。
196デフォルトの名無しさん (ワッチョイ 0e81-snzV)
2018/02/28(水) 02:06:17.61ID:m1ANm8An0 >>192
1CU1ソースって仕事を昔してた。
モジュール分割すら認めてないサイトだった
ソースはそれぞれ1万行越えてたな
最大2万行あったと思う
1日に600行書いたことはある
でも自分を上級者だとは思っていない
そんな自信はありません
書くソースは500行程度だな
どんなに詰め込んでも2000行が限界だわ
1CU1ソースって仕事を昔してた。
モジュール分割すら認めてないサイトだった
ソースはそれぞれ1万行越えてたな
最大2万行あったと思う
1日に600行書いたことはある
でも自分を上級者だとは思っていない
そんな自信はありません
書くソースは500行程度だな
どんなに詰め込んでも2000行が限界だわ
197デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 02:13:49.37ID:8c8qszi40 >>193
これ何故コードに展開したんだ?何かの実験か?
それにしても意味があるとは思えないが。
さすがに手打ちとは思えないから、当然自動コード生成として、
その場合は入力は木データなのだから、歩くのが普通だろ。
100行程度で済む内容だと思うが。
これ何故コードに展開したんだ?何かの実験か?
それにしても意味があるとは思えないが。
さすがに手打ちとは思えないから、当然自動コード生成として、
その場合は入力は木データなのだから、歩くのが普通だろ。
100行程度で済む内容だと思うが。
199デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 02:38:51.42ID:8c8qszi40 >>198
どういう課題かは知らんが、
データとして処理するべき案件をcase文にしてしまうという発想が間違っていると思うけどな。
普通は bool flags[6] でありなしを管理し、10行程度で書ける内容だぞこれは。
どういう課題かは知らんが、
データとして処理するべき案件をcase文にしてしまうという発想が間違っていると思うけどな。
普通は bool flags[6] でありなしを管理し、10行程度で書ける内容だぞこれは。
>>199
ああ、それは説明が必要でしたね
確かにこの課題内容の「縛り」は理解不能でしたが、当時、それに知恵を絞った者も複数いたようです、宿題スレ、粘着の嵐でもう見る影もなく廃墟になってしまったんですが
課題内容
C言語で、
#include <stdio.h>
int main(void){
char n;
/*
ここを埋める。変数の新たな定義
や,printf,scanf以外の関数の呼び出しは禁止
*/
}
な場合で、
1から6までの数字をキーボードから最小で5回受ける
(同じ文字の入力や範囲外の文字の入力は
「無視しました」と出力)
残り一つの数字がわかる場合はキーボード入力
を待たずに決めてよい
最終的に、入力された順番とは逆順に入力
された文字を出力
ああ、それは説明が必要でしたね
確かにこの課題内容の「縛り」は理解不能でしたが、当時、それに知恵を絞った者も複数いたようです、宿題スレ、粘着の嵐でもう見る影もなく廃墟になってしまったんですが
課題内容
C言語で、
#include <stdio.h>
int main(void){
char n;
/*
ここを埋める。変数の新たな定義
や,printf,scanf以外の関数の呼び出しは禁止
*/
}
な場合で、
1から6までの数字をキーボードから最小で5回受ける
(同じ文字の入力や範囲外の文字の入力は
「無視しました」と出力)
残り一つの数字がわかる場合はキーボード入力
を待たずに決めてよい
最終的に、入力された順番とは逆順に入力
された文字を出力
201デフォルトの名無しさん (ワッチョイ 019f-SJjx)
2018/02/28(水) 03:11:31.80ID:8c8qszi40 >>200
クソ問題はやるだけ無駄だぞ。
大体そういうのを考えた奴は実際はプログラマではないことが多い。
だからどういう事が実際に必要なのか分かってないのさ。
K&Rにしても禿本にしても、演習課題付けてくれてるだろ。あれをやる方が1万倍マシ。
或いはテトリスなりを実際に自分で作った方がいい。
少なくともそこでは「実際に必要なこと」しか要求されないわけでさ。
スタックを1バイトも使ってはいけない状態で、
展開したコードならどれだけ大きくてもいいとか、あり得ないよ。
スタックは128バイトまでな、とかならまだ分かるが。
クソ問題はやるだけ無駄だぞ。
大体そういうのを考えた奴は実際はプログラマではないことが多い。
だからどういう事が実際に必要なのか分かってないのさ。
K&Rにしても禿本にしても、演習課題付けてくれてるだろ。あれをやる方が1万倍マシ。
或いはテトリスなりを実際に自分で作った方がいい。
少なくともそこでは「実際に必要なこと」しか要求されないわけでさ。
スタックを1バイトも使ってはいけない状態で、
展開したコードならどれだけ大きくてもいいとか、あり得ないよ。
スタックは128バイトまでな、とかならまだ分かるが。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- 高市が早くあの発言を撤回しないと、中国からもっと大きな制裁が飛んでくるぞ [805596214]
- 【動画】ファッションモデルまんこ、裸でランウェイを歩く。これがファッションだと言われて [749674962]
- 【画像】髙市さん「無職のシンママ支援を手厚くするため、世帯年収900万円以上の控除をカットします🙂」 [881878332]
- 早大名誉教授「高市内閣の高支持率はデータ操作か、支持している日本人がアホなのか」👈核心を突いてしまう [868050967]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
