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/05/13(水) 22:07:53.87ID:+AdS1P590
>>28
どっちのモードで開いてもいいんですね。
また、fopenを2回使う場合も、fcloseは最後の一回だけでいいという訳ですね。
ありがとうございました。
2020/05/13(水) 22:08:13.59ID:Gt6y73ao0
>>27
wは既存ファイルは0バイトに切り詰め、aは出力時はfseekが効かずに常に末尾に追加なので
既存ファイルはr+bで開いて、存在しない場合はw+bで作成するのがいいのではないかな
31デフォルトの名無しさん (アウアウエー Sa93-yXYh)
垢版 |
2020/05/14(木) 11:05:34.52ID:tvxDWcUoa
>>27
"ab+"
2020/05/14(木) 15:09:17.87ID:FSEZeoAj0
Ruby でやってみた

入力ファイル → 更新後
123456789 → abc456789xyz

filename = "test.dat"

# バイナリ読み書き両用
File.open( filename, "r+b" ) do |io|
io.write( "abc" )

io.seek( 0, IO::SEEK_END ) # ファイルの末尾から
io.write( "xyz" )
end

# 更新後のファイルを読み込む
File.open( filename, "rb" ) do |io|
puts io.read( nil )
end
2020/05/14(木) 19:58:19.22ID:9ipBs7pO0
ruby ならきれいに書けるという主張でもないようだけど、誤爆?
2020/05/14(木) 20:18:44.56ID:XsLKEuv3M
ム板で最も嫌われてる荒らしの一人。
懸命なruby布教のおかげで、rubyを覚えるとキチガイになるという通説を広めることには成功している。
2020/05/14(木) 21:06:40.98ID:4E7Wej8RM
感染者には触るな
2020/05/15(金) 20:47:16.71ID:lPwkD6FRH
>>30
>aは出力時はfseekが効かずに常に末尾に追加

これは驚きました!

https://ideone.com/RG43Xw
$ gcc -W -Wall fopen_a_mode.01.c
$ ./a.exe
abcdefgABC
$

https://ideone.com/T8QqyL
$ gcc -W -Wall fopen_a_mode.01.c
$ ./a.exe
ABCdefg
$

新しいことに気が付くようにしていただき、ありがとうございます!
2020/05/15(金) 22:12:47.57ID:drU906O6M
まんま教えて貰ったのに「気が付くようにしていただき」なんだな
2020/05/16(土) 21:22:39.21ID:P7eChC70M
この方はワザと炎上させる放火魔だからな
2020/05/16(土) 22:07:40.72ID:JWSyjCc8H
>>38
失礼しちゃいますね!
私が着火したことはほとんどなく、むしろ買ってに周りが発火している、という気がするのですが?
私が着火した、という証拠はありますか?あるというのなら URL で示してください!
2020/05/16(土) 22:55:05.23ID:XDh9Q16+0
無自覚な分だけ尚更たちが悪い
2020/05/16(土) 23:02:39.46ID:KaLdS6ES0
ruby布教者じゃなくてただのrubyアンチでしょ
布教なんかしてるように見えるの?
2020/05/16(土) 23:50:09.22ID:PLCktpMy0
定期的に書かないと、その名前すらみんな忘れ去るから
2020/05/20(水) 18:04:19.97ID:d4aDDKtR0
x[i][j]でx={0or1}を取る場合、全通りのx[i][j]を生成する方法はありますか?
2020/05/20(水) 18:06:02.61ID:d4aDDKtR0
>>43
x[i][j]を使った計算で全通りを比較したいです
2020/05/20(水) 18:28:24.79ID:2DX/1Ybo0
誰か質問の意味分かる人いる?
何がしたいのかさっぱり分からん
2020/05/20(水) 18:34:34.07ID:d4aDDKtR0
>>45
x[i][j]が変数の関数の最大値を求めたいんですが、全通りの計算をして最大値を求めたいです
2020/05/20(水) 18:37:19.29ID:d4aDDKtR0
ΣΣx[i][j]を含む関数です
2020/05/20(水) 18:41:23.97ID:p2AYPvOI0
全部計算して計算結果を比較して最大値を求めれば良いのでは?
質問の意図が見えない…

iとjの2重ループで全部計算させて結果をresult[i][j]に入れる
その後、もっかい2重ループして最大値を探す

そのまんまだけど…
2020/05/20(水) 18:49:12.44ID:d4aDDKtR0
i,jのサイズが2の時x[i][j]の組み合わせは
@x[0][0]=0、x[0][1]=0、x[1][0]=0、x[1][1]=0
Ax[0][0]=0、x[0][1]=0、x[1][0]=0、x[1][1]=1
Bx[0][0]=0、x[0][1]=0、x[1][0]=1、x[1][1]=0
Cx[0][0]=0、x[0][1]=0、x[1][0]=1、x[1][1]=1
Dx[0][0]=0、x[0][1]=1、x[1][0]=0、x[1][1]=0
……って続くと思いますが、この配列の中身の全組み合わせを生成したいです
2020/05/20(水) 18:52:54.48ID:d4aDDKtR0
あ、うえのΣの奴は間違いです
Σはありません
2020/05/20(水) 18:53:34.24ID:d4aDDKtR0
>>50
あ、あります、ごめんなさい。。
2020/05/20(水) 19:02:07.61ID:B13UAgz80
>x[i][j]が変数の関数の最大値

これからして、意味が分からない
xの型や関数の仕様について、ヒントもないのか
2020/05/20(水) 19:19:09.61ID:p2AYPvOI0
びっくりするくらいわからんわw
フーリエ変換だとかアフィン変換だとかそういうなんか最重要な情報出し忘れてない?
2020/05/20(水) 19:37:46.43ID:RKh8Mgj0d
普通に二重forループ使え。問題文がおかしい。問題がその文章のままなら、たぶん学校か会社を間違えてる。
55デフォルトの名無しさん (ワッチョイ 1aa5-ksJK)
垢版 |
2020/05/20(水) 19:56:18.69ID:WJVU+U120
>>49
@x[0][0]=0、x[0][1]=0、x[1][0]=0、x[1][1]=0
Ax[0][0]=0、x[0][1]=0、x[1][0]=0、x[1][1]=1
Bx[0][0]=0、x[0][1]=0、x[1][0]=1、x[1][1]=0
Cx[0][0]=0、x[0][1]=0、x[1][0]=1、x[1][1]=1
Dx[0][0]=0、x[0][1]=1、x[1][0]=0、x[1][1]=0

ここから値だけ取り出すとこうなる

0000
0001
0010
0011
0100
...

あとは簡単でただの二進数だから1重ループでその整数を1bitずつシフトしてマスクして代入すればいい
2020/05/20(水) 20:02:39.84ID:7PkXr7ui0
添字x2 + 値で合計 3bit の組み合わせか
57デフォルトの名無しさん (アウアウエー Sa52-pTKR)
垢版 |
2020/05/20(水) 20:03:34.53ID:Dfazl3Afa
何のために二次元にしてるのかイミフ
値も0と1しか入れないなら
もっと簡単な構造にすればいいのに
2020/05/20(水) 20:40:35.00ID:O/hEDbqjM
>>49
> ……って続くと思いますが、この配列の中身の全組み合わせを生成したいです

生成すればいい
何が問題なのか説明しないで問題丸投げは嫌がられるぞ
便利な標準関数一つで解決するとかを期待してるなら無理だ
2020/05/21(木) 05:39:15.31ID:vAblB4+m0
bool x[I_NUM][J_NUM]; とすると、x全体で取りうる値のパターン数は
2 ** (I_NUM*J_NUM) になるから、よほど小さな I_NUM, J_NUM でなきゃ
全通りを一度に生成して一覧表で返す方法は無理だよね。

添字 i, j について回る2重ループと、
特定の i, j における x[i][j] に 0, 1 を格納するループ、
合わせて3重のループで「ある場合のx」を生成して
その x で f(x) を計算して、最大値を更新、
3重ループが終わった時点で全パターンでの最大値が得られる、
て感じにするんじゃないかな。

>>46 の「x[i][j]が変数の関数」ってのが、
関数のパラメータとして2次元配列x[][]を取る、って理解だけど。
2020/05/21(木) 11:17:40.63ID:jfJI7kIT0
関数の引数として配列を渡す、って理解?
関数側は、「何それ食い物?」って答えそうだな
2020/05/21(木) 11:23:40.86ID:lS0q7I070
組合せ最適化問題でしょ
組合せ変数を0,1で定義してる
62デフォルトの名無しさん (ワッチョイ 3302-9WPr)
垢版 |
2020/05/21(木) 11:56:11.97ID:J954h+Be0
Cの逆アセ対策の難読化って、ヘッダの関数シグネチャも変えた方がいいの?
2020/05/21(木) 12:14:49.24ID:K4ggzWEW0
バイナリを暗号化して復号ローダーつけるとか
クラックするとき一番困るのがこれ
64デフォルトの名無しさん (ワッチョイ 3302-9WPr)
垢版 |
2020/05/21(木) 12:21:49.65ID:J954h+Be0
>>63
サンクス
復号ローダーは初めて聞いたわw
2020/05/21(木) 16:13:44.63ID:K4ggzWEW0
関数のシグネチャはスタティックリンクすればバイナリには残らない
ダイナミックリンクにするとエクスポートテーブルに載ったりするけどね
2020/05/21(木) 17:03:55.36ID:vAg7pclj0
セキュリティ周りは英語みるしかないね
日本人は忌避感が強すぎる
teratailとかでたまに質問してる人がいるけど
「悪用するひとがいるから回答できない」みたいな発言ばっかり
セキュリティ後進国ニッポン万歳
2020/05/21(木) 17:27:45.11ID:VFiGAn+W0
飲食店の場所取りに自分のカバンやスマホ置く国日本。
敷地の出入り口封鎖にプラスチックチェーン使う国日本。
2020/05/22(金) 03:16:22.12ID:yrCNqXls0
ポインタ変数のバイト数って32ビット環境が4バイトで64ビット環境が8バイトですか?
2020/05/22(金) 07:18:42.71ID:roLyvqPu0
>>65
夢で見たの?
2020/05/22(金) 07:48:33.62ID:QdrkGYuD0
>>68
そういうのが多いが決まっているわけではない
式sizeof(void*)が生じる値は処理系定義なので
コンパイラのマニュアルに記載されることになっている
2020/05/22(金) 08:25:04.59ID:yrCNqXls0
>>70
コンパイラによるんですか
2020/05/22(金) 08:32:57.86ID:QdrkGYuD0
>>71
コンパイラにより、かつ一定の挙動が保証される
それが処理系定義
2020/05/22(金) 08:50:54.09ID:yrCNqXls0
>>72
なるほど
ありがとうございましたm(_ _)m
2020/05/22(金) 09:09:56.75ID:VBq+8Qqi0
ただし実際の実装では>>68のようになってることが多い。
まるで大井川です。
2020/05/22(金) 09:40:58.83ID:+zt+hei00
10回に1回くらいsegmentation faultが起こる原因って何だか分かりますか?
2020/05/22(金) 10:12:13.45ID:QdrkGYuD0
初期化し忘れによる不定
2020/05/22(金) 10:15:38.92ID:QdrkGYuD0
再帰が深すぎ
境界値でのテストをしていない
2020/05/22(金) 10:15:53.42ID:+zt+hei00
>>76
宣言した、配列や変数に全部初期値を入れた方が良いということでしょうか?
2020/05/22(金) 10:44:52.26ID:yrPx0C2WM
>>78
配列や変数に値を入れるより先に値を読むような処理があるなら、その値は不定になるよ。
不定じゃ困るなら初期化しなければならないし、処理の流れ上読むより先に必ず値を入れることになるなら必ずしも初期化は要らない。
2020/05/22(金) 10:46:08.14ID:cP0YviQU0
無効な値とかを決めて、全部初期値としてセットしておいたほうがバグは見つけやすくなるかと
2020/05/22(金) 10:46:44.80ID:RnFaArUl0
全部初期化した方がいいといえばいい、というか…
0とかのデフォ値でいいならそうだよ、というか…

変数に代入し忘れのバグって、変数に代入すべき所でしてないのが原因なワケで
それを直さないとバグったままだよ
2020/05/22(金) 20:37:04.55ID:bFQm7Q/P0
フフフフフフフフフフフフフフフフ
83デフォルトの名無しさん (スフッ Sdba-K7uz)
垢版 |
2020/05/22(金) 21:35:43.84ID:zmnGp56md
Cでディクショナリ型のデータ構造が使いたいんだけど何かいい擬似的な仕組みとかないかな
84デフォルトの名無しさん (ワッチョイ 1aa5-ksJK)
垢版 |
2020/05/22(金) 21:37:08.62ID:Czx4JK5B0
深く考えずそこいらのハッシュのコードをコピペして終わり
2020/05/22(金) 22:21:53.66ID:roLyvqPu0
配列に入れてqsortしてbsearch
2020/05/22(金) 22:38:56.16ID:bFQm7Q/P0
GNU汚染されても構わないなら
2020/05/22(金) 23:06:54.16ID:roLyvqPu0
>>86
意味不明
88デフォルトの名無しさん (アウアウエー Sa52-pTKR)
垢版 |
2020/05/23(土) 04:45:14.96ID:d49u2Ywha
>>83
tcl/tk
または
memcached/memcache-client
89デフォルトの名無しさん (アウアウエー Sa52-pTKR)
垢版 |
2020/05/23(土) 04:46:10.15ID:d49u2Ywha
>>87
ロリコンGNU汚染は深刻
90デフォルトの名無しさん (アウアウウー Sac5-VESM)
垢版 |
2020/05/27(水) 15:04:52.92ID:qSr4WIyQa
Cの初心者質問スレはここでいいのかな?
91デフォルトの名無しさん (アウアウウー Sac5-VESM)
垢版 |
2020/05/27(水) 15:09:46.32ID:qSr4WIyQa
【問題】最大値と最小値を順番に表示するプログラムを作成したい。以下のプログラムに適切なコードを追加して完成させよ。
【プログラム】
int main(void)
{
double a, b, c, max, min;
scanf("%lf", &a);
scanf("%lf", &b);
scanf("%lf", &c);
/* ここにコードを追加 */
if(max<b) {
max = b;
}
if(max<c) {
max = c;
}
if(min>b) {
min = b;
}
if(min>c) {
min = c;
}
printf("%f\n%f\n", max, min);
return 0;
}
92デフォルトの名無しさん (アウアウウー Sac5-VESM)
垢版 |
2020/05/27(水) 15:10:27.38ID:qSr4WIyQa
【僕の解答】
if(max<a) {
max = a;
}
if(min>a) {
min = a;
}

を追加したのですが、上手くいきません。
どこが間違っているのでしょうか??
2020/05/27(水) 15:28:26.21ID:7WWgMS5U0
初期化されてないmax,minと比較をしたら結果は不確定になってしまうでしょ
この場合比較自体が不要、代入するだけでいい
94デフォルトの名無しさん (アウアウウー Sac5-TOJA)
垢版 |
2020/05/27(水) 15:30:27.76ID:l0VRR152a
宿題か・・・

宿題は宿題用のスレがあるので次回からはそちらへ。
95デフォルトの名無しさん (アウアウウー Sac5-VESM)
垢版 |
2020/05/27(水) 15:42:06.32ID:qSr4WIyQa
>>94
そのスレってどこにありますか?
2020/05/27(水) 15:51:45.80ID:YJvjJLLF0
>>95
C/C++の宿題片付けます 170代目 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1456911928/

C/C++の宿題片付けます 170代目 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1456647534/
2020/05/27(水) 16:09:07.31ID:9+VJvnQZ0
170代目宿題スレッドって2つ生きてるんだ。片方しか見てなかったわ。
両方ともさほど繁盛してないみたいだけど。

最大値、最小値を入力されたデータの一つで仮に設定する手法か。
Cに限らない話だね。アルゴリズムって言うほど大袈裟でもないけど。
2020/05/27(水) 20:08:39.45ID:9i+JkCQ6H
>>97
5 年ほど前は大繁盛だったんですけど、最近は授業でも C は取り上げられなくなったんですかね?
2020/05/27(水) 23:36:23.85ID:3VgZbS/t0
>>98
QZのせいで糞スレ化したからだろう
2020/05/27(水) 23:44:18.88ID:4XHC6/z30
退学になったストーカー、今どうしているんだろう
2020/05/28(木) 02:29:00.68ID:MEC8WK3T0
Ruby では、

a = ARGV[ 0 ].to_f; b = ARGV[ 1 ].to_f; c = ARGV[ 2 ].to_f

# ここにコードを追加
max = a; min = a

max = b if max < b
max = c if max < c

min = b if min > b
min = c if min > c

p min, max
102デフォルトの名無しさん (アウアウエー Sa23-1zQY)
垢版 |
2020/05/28(木) 11:35:50.55ID:vYrFHFhya
>>99
+1
2020/05/28(木) 14:39:45.45ID:6YeNiPZ80
自分ならmax,minに無条件に値を入れないで

if (a < b)
{
min = a;
max = b;
}else{
min = b;
max = a;
}
if (min > c) min = c;
if (max < c) max = c;

にする。
2020/05/28(木) 15:37:06.84ID:z3rIKeXH0
もともと穴埋め問題なのに穴以外のところを変更しちゃダメだろう
2020/05/28(木) 19:53:34.78ID:DxwkdxOL0
Makefileを作るのは今もモダンなやり方でしょうか?
2020/05/29(金) 00:00:44.81ID:a4X0A1iZH
>>105
モダンな方法は言語によってもいろいろあるようですが(例えばネットに接続してライブラリの最新版を fetch してくるものとか)、でも、私は make から離れなれないですね…
2020/05/29(金) 03:43:32.77ID:m+W9okcT0
今はninjaだかがモダンらしい
使ったことはないが
2020/05/29(金) 04:13:16.10ID:NMA5faiP0
MPD(Music Player Daemon)のmakeがninjaに変わって、ビルドに泣いた。
mesonというconfigure相当のモノに、configureで指定していたオプションが無くて...

日本語命名品は凶悪だわ。MIRAIとかAnna-senpaiとか。
109デフォルトの名無しさん (アウアウエー Sa23-1zQY)
垢版 |
2020/05/29(金) 12:01:15.97ID:kNF9S1Cua
>>105
C(gcc/cl)でもC++(g++/cl)でもC#(csc)でも現役でmakefile使ってる
2020/05/29(金) 12:14:09.12ID:gj3l07yG0
モダンかと言われると微妙だけど今ならcmakeでMakefile生成でしょ
2020/05/29(金) 12:47:09.33ID:1C1s9P850
Ruby の、rake, thor みたいな、タスクランナーでも使えば?
2020/05/29(金) 13:35:17.59ID:XdiR54Y60
俺もCMake愛用している
2020/05/29(金) 16:31:04.57ID:6E0tm9y70
テキストエディタほどでないにせよ、ビルドツールも喧嘩の種になりそうかな。
大勢の人が集団で開発とか、クロスプラットフォーム向けに配るとかでなきゃ、
好きにすりゃいい気もするのう。

個人的にはmakeが大好きで万能バッチファイル的に使うけど、
俺自身決してモダンボーイじゃないから。
2020/05/29(金) 16:58:41.27ID:m+W9okcT0
makeってあれサブルーチンみたいなことするにはどうすりゃええの
2020/05/29(金) 17:27:36.35ID:eRAtimlp0
gcc流のオプションをclのオプションに変換してclを呼び出すラッパーある?
2020/05/29(金) 19:15:47.50ID:6E0tm9y70
>>114 本当に単純なサブルーチン呼び出し風なら
サブルーチンに相当するターゲットを順番に依存対象にしてこんな感じ。

.PHONY: main sub1 sub2

main: sub1 sub2
 @echo "and now, going main"

sub1:
 @echo "this is sub1"

sub2:
 @echo "I'm sub2"
2020/05/29(金) 19:52:57.95ID:RYBayMc0H
>>115
それ需要がありそうですね…
2020/05/30(土) 01:03:07.50ID:fWBi0L4D0
>>116
おお、なるほど
こんなんでいいのか
助かったよサンクス
119デフォルトの名無しさん (ラクッペペ MM4b-eKGp)
垢版 |
2020/06/01(月) 09:59:41.94ID:ruvyvZ5aM
てす
2020/06/01(月) 23:23:12.08ID:GR8q4A/e0
グローバル変数で、
char A[4], B[4];
と宣言したら、メモリ中でAのすぐ隣にBが来ることは保証されているんですか?
例えば、Aはインデックスが0から3までですが、この範囲を超えてA[4]に
アクセスしたら、それはB[0]にアクセスしたことになるんですか?
2020/06/01(月) 23:30:59.93ID:K8qQM5W10
環境依存でどっちに配置されるかの保証はなかったような
2020/06/01(月) 23:46:04.68ID:idPskxLG0
>>120
範囲を超えたアクセスは未定義動作。順序どころか隣接する保証もないよ。
2020/06/02(火) 00:09:21.50ID:xK3L40dza
自分で保証するしかないよ
2020/06/02(火) 07:03:39.55ID:0laQbiBy0
>>120
順序や隣接を保証したいなら struct を使うとか
2020/06/02(火) 09:08:00.49ID:6Rv/5LNl0
その場合もパディングについては知っておかないと。
2020/06/02(火) 09:46:07.68ID:t1gowtwYd
荒井さんがケツに詰め物してくるねんで
127デフォルトの名無しさん (ブーイモ MMab-S7K8)
垢版 |
2020/06/02(火) 10:04:47.98ID:OudFIOlRM
char A[8];
char *const B=&A[4];
でいいじゃんなにが問題なの?
2020/06/02(火) 10:15:18.47ID:6Rv/5LNl0
>>127
質問者のやりたいことはおそらくそれで事足りるとは思う。
問題があるとすればsizeof(A), sizeof(B)の値が当初の書き方と異なるとかかな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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