C言語なら俺に聞け 145

■ このスレッドは過去ログ倉庫に格納されています
2018/02/19(月) 22:13:58.98ID:9/te2eSJ0
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
2デフォルトの名無しさん (アウアウエー Sadf-kYbg)
垢版 |
2018/02/20(火) 02:33:02.25ID:ji3scNPMa
屑はFPGA用のCの話でもしたかったのかな
2018/02/20(火) 02:44:25.94ID:m4PE5Z7I0
C言語の話題のみ取り扱います
2018/02/20(火) 14:09:01.08ID:/DCDJ0JEd
ptintfの%nはハッカー用に用意されているのでしょうか?
2018/02/20(火) 15:18:27.75ID:hfa6NjO10
違います
デジタル回路の設計用です
6デフォルトの名無しさん (アウアウエー Sadf-kYbg)
垢版 |
2018/02/20(火) 17:08:35.47ID:mAwVhufea
0xがあるのに
0bがないので面倒っちい
2018/02/20(火) 18:08:25.47ID:cb0RUbY/d
visual studioが重いからvisual studio codo使って勉強してますが、これでデバッグできる環境設定がネットのだとよく分からないんですがどうやってやれば出来ます?
2018/02/20(火) 19:11:44.29ID:qvO4qxFaa
スレチだがVSが重い環境ってのが気になる
2018/02/20(火) 21:29:40.57ID:TNHwfC6jM
オトコは黙ってG・D・B
2018/02/20(火) 21:56:11.61ID:SJPS4KKx0
>>9
gdb からは逃げ回っています、可能な限り printf() デバッグの方を選択します
11デフォルトの名無しさん (ワッチョイ 579f-+35F)
垢版 |
2018/02/21(水) 00:51:16.84ID:srFoMZ/m0
そしてバッファリングされてしまうと
2018/02/21(水) 00:54:55.04ID:jU0tYaxw0
>>11
fflush() は必ずペアで使いますよ、まあそれでも iostream<<と混在させるとぐちゃぐちゃになりますね
2018/02/21(水) 03:09:16.23ID:srFoMZ/m0
ここはC言語のスレなので iostream の事は忘れてくれ。
14デフォルトの名無しさん
垢版 |
2018/02/21(水) 07:13:52.97
setbuf(stdout, null);
setbuf(stderr, null);
しとけばいいじゃん
15デフォルトの名無しさん (アウウィフ FF9b-kYbg)
垢版 |
2018/02/21(水) 10:46:31.37ID:zwuXHePGF
おそくなる
2018/02/21(水) 10:56:41.04ID:t+c4IaP2d
変数宣言後に値を代入する前にprintfで表示させると数値がでてきますがこれは何の数値ですか?
17デフォルトの名無しさん (アウウィフ FF9b-kYbg)
垢版 |
2018/02/21(水) 11:05:20.20ID:zwuXHePGF
メモリのなかみをprintfの書式で解釈したもの
18デフォルトの名無しさん (アウアウカー Sa6b-10N7)
垢版 |
2018/02/21(水) 11:22:42.78ID:1i/dh69la
>>16
不定値

何が出てくるかわからない
2018/02/21(水) 16:26:52.49ID:aBAsvFL30
前に使ったデータの切れはし
2018/02/21(水) 16:52:48.64ID:JslMlxHn0
意味のある値を期待してはいけない謎の値
固定値か実行毎に変わるかも謎
2018/02/21(水) 17:12:09.16ID:hxHF5FEW0
スカートめくりしてはいけないのと同じ、見てはいけない場所
2018/02/21(水) 20:06:03.04ID:N7GlfDUh0
グローバル変数とstaticなローカル変数はその変数の型によって決められている値(0や0Lや0.0など)で初期化される
staticでないローカル変数(殆どはこれ)の値は不定
2018/02/21(水) 21:09:11.08ID:enETD2EIM
なんで不定なの?
2018/02/21(水) 21:11:25.31ID:eHdxbQfi0
定まった値を入れる手間すら惜しんでもいいようにしてるから
2018/02/21(水) 21:53:04.93ID:XwEf5GYC0
Cで引数リスト部分が空の関数ポインタと構造体値渡しを↓のように組み合わせて使うのはNGですか?
#include &lt;stdio.h&gt;
long func(long a, char b, short c) {
 return a+b+c;
}
int main(int argc, char *argv[]) {
 long(*pfunc)() = func;
 struct {
  union {
   char a;
   short b;
   long c;
  } u[3];
 } param;
 param.u[0].a = 1;
 param.u[1].b = 2;
 param.u[2].c = 3;
 printf("%d\n", pfunc(param));
 return 0;
}
2018/02/21(水) 22:18:58.55ID:UifE8nP3d
>>25
関数の型が不一致。
27デフォルトの名無しさん (アークセー Sx0b-HN+l)
垢版 |
2018/02/21(水) 22:55:45.50ID:04BHZTp/x
全くの初心者だがプログラム手に入れて動かしている。
最近はテトリスを動かした。C言語は学生の時に
挫折しているので高望はしていないが俺の時代よりも
学習環境も随分と楽になったもんだ。
2018/02/21(水) 22:56:32.48ID:9Zl2Px8M0
昔はLSI-Cくらいしか無かったからな
29デフォルトの名無しさん (ワッチョイ 97b3-T3WU)
垢版 |
2018/02/21(水) 23:28:19.69ID:J5LO2Gvl0
[] [[[ [[ [] ][ [] [ ] [] ][]] [[[ [] }
30デフォルトの名無しさん (ワッチョイ df9f-x4Or)
垢版 |
2018/02/22(木) 00:28:06.89ID:rOhp+nuf0
>>25
NGっていうか、それ普通にダメだよね。型が一致しないし。
まあ、Cコンパイラの実装によってはうまいことスタックに積まれて a, b, c が意図した通りに伝わるのかも知れないが、
しかしそれは実装依存だ。同じコンパイラ使っても最適化したら違う結果になるんじゃないだろうか。
2018/02/22(木) 00:37:40.47ID:Tb8t5xzSM
>>27
ロードランナー本を手に入れるんだ
2018/02/22(木) 01:29:12.41ID:G3RQleyza
不定でバグ起きるコード書くなんてふてぇ野郎だ
2018/02/22(木) 06:13:33.98ID:WzMowRZZ0
>>25 >>30
引数リストが空の場合に「引数を持たない関数」ではなく
「引数の整合をチェックしない関数」と解釈する、
古いCでの動作を期待してるんじゃないかな。一応は規格準拠のはず。
コンパイルオプションでの規格指定がモロに影響する部分かも。

構造体を値渡しで引数にするとき、単純型とは異なるスタックの使い方をする
可能性があるから期待とおりに動くかもしれん、動かないかもしれん、だな。

仮に各要素をスタックに積む場合でも、単純型の並びとは逆順に
スタックに積まれる可能性もあるんじゃないか。
2018/02/22(木) 06:16:17.25ID:WzMowRZZ0
すまん、上の書き込みは >>25 の質問に対する >>26 >>30 へのコメントだ。
なんだか混ざってしまった。
2018/02/22(木) 06:49:26.50ID:WzMowRZZ0
たびたび申し訳ない。

引数リストを書かない関数定義/宣言 func() は
どのCでも func(void) とは解釈されないんだっけ?
C99で将来廃止予定という情報は見つかったけど、まだ廃止されてないか。
36デフォルトの名無しさん (ワッチョイ d061-POFq)
垢版 |
2018/02/22(木) 11:30:56.06ID:bU9JilnM0
ウインドーズのコマンドラインオプションで記号が{があると
ダブルクオートで囲んでもこの記号の前で引数がおわってしまうんですけどなぜでしょうか?
リナックスではそうはなりませんでした、{の前にエスケープ文字\を置くとうまくいきました。
なぜこうなるのか教えてください。調べてもわかりませんでした。
2018/02/22(木) 11:45:12.93ID:mvuupCVs0
>>36
それはC言語の範疇ではないよ。
windowsのコマンドプロンプトやLinuxのシェルとかを調べるといいかも。
2018/02/22(木) 12:10:34.27ID:rGSqnyaQ0
>>36
具体的にどういうプログラムやコマンドでどういう操作をしてそういう現象が起きたのか、手順を一通り書いてみて
ひょっとして自作のCプログラムでそうなったとか?
2018/02/22(木) 12:18:26.14ID:bU9JilnM0
自作のプログラムでやりました。
具体的に書くとa "abcd{efghijk"みたいにコマンドをじっこうすると
メイン関数のおぷしょんをしらべるとabcdしか入っていませんでした。
2018/02/22(木) 13:37:57.37ID:WzMowRZZ0
>>36
自作コマンドにコマンドライン引数が渡る前に何者かが横取りするんだな。

Windowsのバージョンとか、コマンドプロンプトの種類とか、
Cコンパイラの種類を書くと情報が集まりやすいかも。
2018/02/22(木) 14:12:50.33ID:Ee7revq90
>>36
これで試してみて
こちらでは現象を再現できない
https://ideone.com/CZGZae
2018/02/22(木) 14:16:59.02ID:qwLRFwLN0
>>39
gcc (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 7.2.0
Microsoft Windows 10 Pro 10.0.16299 N/A ビルド 16299
→ 再現せず
2018/02/22(木) 15:22:35.73ID:Fv+tpfSs0
関数の宣言とプロトタイプは別物
2018/02/22(木) 15:51:29.29ID:ejK712YH0
>>39
コマンドシェルの都合か コンパイラのランタイムの都合か
環境(使ってるコンパイラ 実行環境:コマンドラインからなのかデバッガーからなのか etc) に
委ねられてるかんじだな
2018/02/22(木) 15:56:19.77ID:bU9JilnM0
ありがとうございます。
シェルを変えたらできました。
46デフォルトの名無しさん (アウアウカー Sa0a-V6cO)
垢版 |
2018/02/22(木) 16:30:38.85ID:GyUXMKgfa
>>45
シェルって?何から何に変えたの?
2018/02/22(木) 16:57:56.68ID:bU9JilnM0
eshellからmsys2に付属のやつに替えますた
2018/02/22(木) 17:29:33.80ID:rGSqnyaQ0
>>47
それを先に言わないと
一番肝心のことじゃないか・・
49デフォルトの名無しさん (アウアウカー Sa0a-V6cO)
垢版 |
2018/02/22(木) 17:31:08.76ID:4gldXmu7a
>>47
eshellは{}に特殊な意味がある。
それはeshellコマンドの実行結果に置き換えられる。(shのバッククオートと似ている)。
2018/02/22(木) 21:33:01.57ID:7WUP8gc30
スロットゲームを作成しようと思っていろいろサイト見てるんですけど、数字の1〜9を順番にループ表示ってどうやるんですか?
2018/02/22(木) 21:36:38.38ID:bw7NPixRd
>>50
0〜9、そして0が描かれた画像を表示部分だけをクリッピング(切り抜き)して、回転させてアニメーションする。
2018/02/22(木) 22:38:43.81ID:tV4J1Ww80
>>26 >>30 >>33
コメントありがとうございました。
狙いは>>33に書かれてる通りで、>>25のコードもMinGWのgccでコンパイルが通って
実行結果も期待通りだったことから大丈夫なのかなと思ったのですが・・・。

そもそも古い書き方で、将来無くなる予定(ってC99の6.11.6に書かれてるんですね)との
ことですので止めておきます。
2018/02/23(金) 01:55:49.74ID:UgOkn/Bq0
int main(void), int main(int, char**) どちらも ok なのだか
int (*pfunc)()のような書き方はなくならないと思う
2018/02/23(金) 06:00:42.07ID:lIelkvwO0
関数ポインタにvoid*的な総称ポインタはねえぜ
2018/02/23(金) 07:59:19.70ID:Ska5zxPe0
long(*pfunc)() = func; の行がエラーになるのか。
long(*pfunc)(long, char, short) = func; なら通る。

「longを返す関数なら何でも入れられる関数ポインタの変数」てのが
認められないのね。
2018/02/23(金) 08:06:24.83ID:c0IwYAH60
良く考えると関数用の汎用ポインタが無いのはおかしい
2018/02/23(金) 10:50:05.99ID:lIelkvwO0
無理だよ
仮引数の違い=スタック構造の違いなんだから
2018/02/23(金) 12:07:23.73ID:fgXllc68d
gcol(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。
2018/02/23(金) 12:08:21.32ID:fgXllc68d
>>58
gcolor(rcol & 0xFF , & gcol & 0xFF ,
bcol & 0xFF)

これの意味を教えてください。
2018/02/23(金) 12:15:11.26ID:uhME+YqbM
>>57
呼出側が責任持つのがc流で、だから可変引数が実装出来る
って習ったんだが、最近は違うのけ?
2018/02/23(金) 12:18:14.88ID:0SE2Ag1M0
>, & gcol & 0xFF ,
間違ってるような気がするけどな。
変数/関数名からRGB値取ってるだけに思えるし。
2018/02/23(金) 12:27:00.80ID:yhtAX1ye0
呼出し側の引数や戻り値の扱いを規定するのは呼出規約
x86/x64上のC言語ではcdeclが一般的だけど組み込み系の処理系の一部には独自実装のものもある
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
2018/02/23(金) 12:36:44.19ID:fgXllc68d
>>61
それは変数宣言で
rcol gcol  bcol =64です。
&16進数なのはどうしてですか?
2018/02/23(金) 13:51:39.54ID:lIelkvwO0
>>60
可変引数?
void func(double);
void (*ptr)() = func;
ptr(1); //1.0で渡すべきところ1が渡される
void func(double arg) //スタック構造の不一致が起きる
{
//全然関係ねえだろ
}
2018/02/23(金) 14:15:00.31ID:mpvgXBL20
>>63
8 bit 幅分だけ &(and) 演算子で切り取っているのではないですか?
2018/02/23(金) 14:21:37.49ID:vnQpXFI50
>>60
可変引数なら可変引数として書かないとだめでしょ
2018/02/23(金) 14:22:41.05ID:mpvgXBL20
>>55
なるほどねえ
https://ideone.com/hVdYWa
2018/02/23(金) 14:35:58.87ID:uhME+YqbM
>>64
そうか、良かったな。

所で、最近はそういうのも可変引数って言うように
なったのか。varargs.hは廃盤か。
69デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/23(金) 14:59:14.82ID:0k9d4/ABa
>>63
君が何を言っているのかよくわからない。
2018/02/23(金) 15:09:04.10ID:lIelkvwO0
>>68
あれが可変引数?
俺は全然関係ねえだろって書いたんだが
2018/02/23(金) 15:44:15.83ID:0SE2Ag1M0
ID:fgXllc68d は必要な情報書かな過ぎ。
2018/02/23(金) 15:47:17.83ID:V7qyvSbE0
可変個引数は va_start() するときに番兵となる引数が必要なので
最低でも1個は固定の引数が欲しいんだよね
func(int , ...) とかになる
73デフォルトの名無しさん (アウアウカー Sa0a-sySv)
垢版 |
2018/02/23(金) 16:06:00.23ID:0k9d4/ABa
可変長引数なんて認めなければよかったのにな。
またはJavaみたいにシンタックスシュガーにしておいて実は配列に変換して要素数と共に渡すみたいにしておけばもっとましな感じになったのに。
2018/02/23(金) 16:43:48.45ID:lIelkvwO0
Bの頃からあったprintfの実装テクニックだし
だいいちCは簡潔さを売りにしてたんで
理想論に走って複雑さを増すようなことを嫌ったんだよ
2018/02/23(金) 16:48:19.38ID:yeKpu5OYM
>>72
せやな。
で、func(int,....) な関数ポインタは作れるよね。
それを汎用的に使うことは出来る。ってのが56への回答じゃね?
2018/02/23(金) 17:03:04.90ID:lIelkvwO0
void func(int, double);
void (*ptr)() = func;
ptr(1, 1); //1.0で渡すべきところ1が渡される
void func(int top, double arg) //スタック構造の不一致が起きる
{
va_list ap;
va_start(ap, top);
assert(va_arg(ap, double) == arg); //通るわけねえだろ
va_end(ap);
}
2018/02/23(金) 17:11:03.17ID:V7qyvSbE0
>>75 いいや ポインタだけじゃ片手落ち
(キャストじゃだめで)関数の実体側の引数も同じ引数で実装しなければならない
2018/02/23(金) 17:26:46.79ID:UgOkn/Bq0
スタートアップは argc,argvをスタックに積んで _mainを呼ぶ
_mainが int main(void)だとしても問題ない
2018/02/23(金) 17:49:49.55ID:Ska5zxPe0
>>67 はエラーなくコンパイル・実行できてるようだから、もう少し検証。
ideone.com でなくローカルのgccで実験。

どうやら func() 定義の引数リストに制限があるみたい。
void f(double x) ... エラーなし ( >>67 の例と同じ)
void f(int x) ... エラーなし
void f(void* x) ... エラーなし
void f(char x) ... 警告:「互換性のないポインタ型」
void f(short x) ... 警告:「互換性のないポインタ型」
void f(float x) ... 警告:「互換性のないポインタ型」

警告は void (*pfunc)() = f; の行で発生。
実引数の自動拡張よりも狭い幅の仮引数の型を使おうとすると警告かな?
コンパイラによって動作が異なる部分で、深追いする価値は無いのかも。
2018/02/23(金) 18:00:16.52ID:yeKpu5OYM
>>77
78が正解。更に言えばmainの引数には envp もある
2018/02/23(金) 18:25:51.38ID:UgOkn/Bq0
envpはANSI C 標準に対する Microsoft の拡張機能
https://msdn.microsoft.com/ja-jp/library/k104fy6h.aspx
2018/02/23(金) 18:42:59.00ID:mpvgXBL20
>>81
posix にもある、推奨されているわけではないが
2018/02/23(金) 19:10:50.73ID:Ska5zxPe0
補足というか訂正。
>>55 で「long(*pfunc)() = func; の行がエラーになる」
と書いたけど警告だった。よって >>25 のソースもコンパイル可能。

ちなみに結果は期待の 6 とは桁違いのデカい数値だった。
2018/02/23(金) 20:24:30.86ID:mFkXyQ34M
void*でええやん
2018/02/23(金) 21:15:05.64ID:JKrDz8Gza
 ヘ_ヘ
ミ・・ ミ
(   )〜
2018/02/23(金) 21:32:39.13ID:my0767Fs0
void から ヘミ猫 て fj かよ
2018/02/24(土) 00:57:58.46ID:ar5NnKGja
>>83
>>25の書き方そのままじゃlong aの部分しか渡されてないからb, cは不定値になってるのでは?
2018/02/24(土) 06:40:32.39ID:agv5rOmv0
>>87
param には「long幅の共用体3要素の配列」が含まれるから、
値渡しすればスタックに (sizeof(long) * 3) byteのデータが積まれるはず。

というか、main()でparamの各要素をlong解釈で表示させたら
見事にaやbの上位ビットにゴミが入っていた。
2018/02/24(土) 09:43:12.88ID:uX3sJRXI0
structにstaticつけ忘れてましたとか
2018/02/24(土) 15:58:01.09ID:dhHE2VyNa
>>88
> 各要素をlong解釈で表示させたら見事にaやbの上位ビットにゴミが入っていた。
それは初期化の問題では?

確かに値渡しはスタックにコピーされるけど、関数の引数にはもう一回コピーはいるから、そこで関数不一致の弊害が発生すると思う
>>25のコードそのままだとaしか正しく渡されてなくて、b,cは明後日の方向からデータ取ってきてるかと
2018/02/24(土) 16:57:25.47ID:agv5rOmv0
>>88 に「期待の6」と書いたせいで誤解させてしまった。
もちろん実際の動作で6が表示されると思っていたわけじゃないのだ。
この流れの発端の質問 >>25 と、それに追加された >>52 の、
「実行結果も期待通りだった」て記述を受けての「期待の6」でね。

むしろ共用体への代入で、
 param.u[0].a = 1; // charの代入 byte転送命令
 param.u[1].b = 2; // shortの代入 word転送命令
 param.u[2].c = 3; // longの代入 dword転送命令
てな具合にアセンブルされ a, b の上位ビットに未初期化のゴミが残り、
関数に実引数の値として渡されるときもゴミごとコピーされるのは当然。
>>52 で期待通りに動いたのは、paramの未初期化での状態が
たまたま全部ビットで0だったんだなぁ、というお話。

>>25 のリストで、関数 func() の仮引数 a, b, c の型と、
共用体の要素 a, b, c の型が食い違ってる点にも注目して頂きたい。


…長々と失礼。誤解の余地なく説明しようとするとクドくなってしまう。
2018/02/24(土) 18:41:41.80ID:7mL/bBDwd
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 80

void* my_realloc( void* p, size_t bytes, int line ) {
if( (p = realloc(p, bytes)) == NULL ) {
fprintf(stderr, "realloc failure called at line %d\n", line);
exit(EXIT_FAILURE);
}
return p;
}
int main () {
FILE *fp;
char *file = "data.csv";
char buf[BUF_SIZE], input[BUF_SIZE], format[20];
char **result, *s;
int i, size = 50, count = 0;

if( (fp = fopen(file, "r")) == NULL ) {
perror(file);
exit(EXIT_FAILURE);
}
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
scanf(format, input);

result = my_realloc(NULL, sizeof(*result) * size, __LINE__);

while( (fgets(buf, sizeof buf, fp)) != NULL) {
if( strstr(buf, input) == NULL ) continue;
2018/02/24(土) 18:42:06.22ID:7mL/bBDwd
s = my_realloc(NULL, strlen(buf) + 1, __LINE__);
strcpy(s, buf);
result[count++] = s;
if( count >= size ) result =my_realloc(result, sizeof(*result) * (size += 20), __LINE__);
}

for( i = 0; i < count; i++ ) {
printf(result[i]);
free(result[i]);
}
free(result);

return 0;
}
2018/02/24(土) 18:45:40.89ID:7mL/bBDwd
上記のコードから追加でしたいことが2つあります。
@検索単語を2つにしたい。
Aフォルダないの全ての.csvファイルを検索かけたい。

sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1);
scanf(format, input);

result = my_realloc(NULL, sizeof(*result) * size, __LINE__);

ここの文の意味が分かりません。
2018/02/24(土) 21:35:03.63ID:h1W1dcA8d
>>94
クソコードだ。あまり参考にせず、自分で考えた方がいい。
my_reallocはreallocをラップした関数形式マクロのようだ。リファレンスのreallocを参照。
__LINE__は現在の行番号を表し、デバッグなどに使う。
sprintfはprintfを文字列出力にしたものだ。%%は%になって出力される。
2018/02/24(土) 21:47:22.04ID:h1W1dcA8d
sprintfで出力した文字列をscanfに書式として渡している。でもこのようなscanfの使い方はオススメできない。
2018/02/24(土) 21:56:26.92ID:h1W1dcA8d
%dは整数を表す文字列になるので、%%%dsは%(何らかの整数)sになる。これは文字列出力の幅指定だ。
幅指定には、別の直接的な方法があるので、こんなことしなくてもいい。
scanfの使い方は引数の個数がちょっと間違っているように見える。
2018/02/24(土) 21:59:21.39ID:h1W1dcA8d
バグや不具合の元になるscanfなんて使うな。fgetsとsscanf使えば充分で分かりやすくて確実だ。
2018/02/24(土) 22:25:03.02ID:tEhbLaK5M
>>94
@else ifでええやん
Areaddirでええやん

myreallocみたいなモンはマクロにしとけ
reallocみたいな糞ライブラリ使うな
sprintfみたいな糞ライブラリ使うな
2018/02/24(土) 22:45:22.29ID:PDjCLuF50
特定のフォルダ(dir)内のファイルを順次処理したいときは
Unix系ならばopendir()、readdir()、closedir()を使う。
VCならばFindFirstFile()、 FindNextFile()、FindClose()を使う。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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