1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.44【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1194016813/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
293 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:30:50 ] vectorの解放ってあんましピンとこないなー。 std::vector<T>( hoge ).swap( hoge ) でシュリンクできる、ってEffectiveSTLにあったけど、 そういう話?
294 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:34:25 ] 解放できましたよ 標準でついてないのが良くないですね main(){ int n; vector<double> a(10000000,1); vector<double>().swap(a); scanf("%d",&n); }
295 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:37:39 ] >>293 作業領域でたとえば100M使っていたとして、そのあとにもプログラムが続く場合 作業領域は消したいですよね 多分サブルーチンで確保したものは戻るときに消えていると思うのですが そうでないと消したいわけなんですが・・標準でついてないです
296 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:44:52 ] そういう意味なら、スコープ抜けたら消えるでしょ。 vectorの定義から消したい場所までをブロックで囲めば。
297 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:47:29 ] 万能解放命令できたよ template<typename T> void clear(T& t){ T().swap(t);} main(){ int n; string a; a.resize(100000000); clear(a); vector<double> b(10000000,1); clear(b); scanf("%d",&n);}
298 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:50:30 ] >>296 実験してみました ちゃんと解放しますね 勉強になりました main(){ {vector<double> b(10000000,1); Sleep(1000);} int n; scanf("%d",&n); }
299 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:00:26 ] でも有効範囲を括弧で括るのは紛らわしいですね 他にも適用範囲の別の物がまじっていたら困ります 明示的に解放するほうが良さそうですね
300 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:00:51 ] vcはclearで解放しなかったかな
301 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:23:11 ] C99の複合リテラルに対応しているコンパイラって何がありますか?
302 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:40:38 ] gccって更新はやいんじやないの?
303 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 00:36:56 ] >>299 まともにスコープ切ってれば明示的な解放(ブロック作成)が要るようになることなんて 無いと思うよ。そうとう特殊な場合でしょ。
304 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:17:40 ] ImpersonateLoggedOnUser関数による偽装ログオンについて教えてください アドミン権限で動いてるプログラムのうち、ユーザHOGEに偽装ログオンして 動かしたいA()という関数と、アドミン権限で動かしたいB()という関数があります。 このとき、 LogonUser(..., &hToken); ImpersonateLoggedOnUser(hToken); A(); B(); RevertToSelf(); CloseHandle(hToken); としてしまうと、B()までHOGE権限で動いてしまうと思っています。ので、 LogonUser(..., &hToken); ImpersonateLoggedOnUser(hToken); A(); RevertToSelf(); CloseHandle(hToken); LogonUser(..., &hToken); ImpersonateLoggedOnUser(hToken); A(); RevertToSelf(); CloseHandle(hToken); B(); とするか、 LogonUser(..., &hToken); ImpersonateLoggedOnUser(hToken); A(); RevertToSelf(); ImpersonateLoggedOnUser(hToken); A(); RevertToSelf(); B(); CloseHandle(hToken); とするかだと思うのですが、A()、B()が何回か繰り返し呼び出されるとき、後者のように LogonUser()を呼ぶのは一回だけにして、LogonUser()とCloseHandle()の間に複数回の 偽装・偽装解除・A()・B()を呼び出すのは問題ないでしょうか。 多分大丈夫なんじゃとは思うのですが、そういうサンプルコードが見あたらなかったので 決めかねている次第です。どなたか教えていただけると助かります。
305 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 11:44:17 ] 文字列リテラルにスコープってある? char *func(){ return "Hello,World!!!"; } てあり?
306 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 11:56:07 ] >>305 大蟻。 つーか、常套手段。但し、const char *を返すべき。
307 名前:306 mailto:sage [2007/12/14(金) 11:58:04 ] >>305 書き忘れた。文字列リテラル自体の生存期間はstaticと同じく、プログラム開始時から終了時まで。
308 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:47:11 ] >>306-307 サンクス そうかconstだったな
309 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 15:35:34 ] スコープ(名前の有効範囲。コンパイル時にチェックされる)と 寿命(変数を置く場所がその変数のための場所である期間。実行時の話)は 別の話だぞー。
310 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 22:33:52 ] 参考書を見ながら独学でやっているプログラミング初心者です。 どうにもわからないことがあるので質問します。 #include<stdio.h> int main(void){ int a = 1; int b = 0; printf("short int型のサイズは%dバイトです。\n",sizeof(short int)); printf("int型のサイズは%dバイトです。\n",sizeof(int)); printf("long int型のサイズは%dバイトです。\n",sizeof(long int)); printf("float型のサイズは%dバイトです。\n",sizeof(float)); printf("double型のサイズは%dバイトです。\n",sizeof(double)); printf("long double型のサイズは%dバイトです。\n",sizeof(long double)); printf("変数aのサイズは%dバイトです。\n",sizeof(a)); printf("式a+bのサイズは%dバイトです。\n",sizeof(a+b)); return 0; } でコンパイルするとlong doublのところが10バイトになるのですが 私の持っている参考書の{やさしいC}では8バイト表記になっています。 何度も見直していますが間違いがわかりませんでした。 よろしくお願いします
311 名前:310 mailto:sage [2007/12/14(金) 22:40:24 ] 動作環境はWinXP 使用コンパイラはCpadというものです。
312 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 22:41:38 ] 型のサイズは環境によって違う。 long double は 8, 10, 16 バイトの3種類くらい見たことがある。
313 名前:310 mailto:sage [2007/12/14(金) 22:57:54 ] >型のサイズは環境によって違う。 long double は 8, 10, 16 バイトの3種類くらい見たことがある。 環境の違いがあるということも頭に入れて勉強を進めたいと思います。 ありがとうございました。
314 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 23:39:03 ] GCCとVCくらいしか使わん身としては 10バイトってのは珍しいね
315 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 23:52:31 ] コンソールで画面整形というか画面操作というか、正しい呼称はわからないのですが 例えば複数行に渡って 1111111 2222222 3333333 4444444 などと表示した後、それに被せる、ないしは消して同じ位置に出力というのは不可能でしょうか? 自分で調べてみて大量の\r\bを並べてみてもうまくいかなく今は大量の\nでごまかしごまかしやっています
316 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:08:05 ] そんなあなたに ncurses でもwin用ってあったけ?
317 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:12:19 ] 調べてみると 利用可能OS AIX BeOS Cygwin Digital Unix (aka OSF1) FreeBSD GNU/Linux HPUX IRIX OS/2 SCO OpenServer Solaris SunOS あばばば、Cygwinか、いやしかし・・
318 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:14:37 ] PDCursesってのもあるでよ。
319 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:15:09 ] cursesならある。 VCか何かだったかな・・・。 でもそれよか、そのぐらいならエスケープシーケンス有功にした方が早いかもよ。
320 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:21:51 ] エスケープシーケンスっていうと自分のところでしか結局動かないことになっちゃうような・・? PDCurses、なかなかいいページがみつからないのでちょっと試行錯誤してきてみます
321 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:33:06 ] fseek的なのほしかぁ、ありがとう
322 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:43:58 ] enum Foo { a = 0, b = 10, }; int main() { Foo x = Foo(3); } VC71ではこれがコンパイル出来るんだけど、 Foo xが列挙型Fooにない値を取り得るというのは正しい動作?
323 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:46:46 ] 結局windows.hが入ってきましたとさ
324 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 01:29:51 ] >>322 xは11になったろ?
325 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 02:23:22 ] >>324 いや、int(x) == 3だった。
326 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 07:52:18 ] >>314 Intel 系の CPU は浮動小数点を 10 バイトで扱ってるから別に珍しくはない。 Intel 系の環境なら、16 バイトになってても 6 バイトはパディングが入ってるだけ。普通なら。 昔は Turbo C++ とか 10 バイトだったような。 >>315 Win ならコンソール系の関数があるのは知っている。 使った事無いから目的の操作ができるかどうかは知らんが。 msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/Toppage_Console.asp
327 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 10:06:17 ] >>322 列挙Fooの値の範囲は 下限が0で上限が15になる。 xがその範囲の値ならFoo(x) はOK。
328 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:17:34 ] DLLでdosコマンドを呼び出すとき、ms-dosの標準ではないアプリなどですが 全くdos画面を出さずに呼び出すにはどうしたらいいですか? エラーが出るとdos画面が出てきてしまいます
329 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:23:54 ] >>328 SetStdHandle
330 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:43:49 ] >>329 サンクス 日本語サイト検索してもヒットが少ないんですけどどうやってその知識を得たんですが? 物知りさんですね
331 名前:デフォルトの名無しさん [2007/12/15(土) 16:57:51 ] ソースの行数とかクラスの数とかを計測したいのですが 何かいいソフトはないでしょうか? Linuxです
332 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:10:37 ] >>331 行数は wc でいけるでしょ。クラスの数は grep でだいたいいけそうだけど、 doxygen とか使ったほうがいいかもね。
333 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:11:37 ] 最近プログラミングをはじめたのですがWindowsXP+VC2005環境でexeファイルにtxtファイルをドラッグ&ドロップして fstreamでファイル操作する簡単なプログラムを作ろうと思ったのですが ifstream file; file.open(argv[1]); こんな感じでargv[1]からファイルパスを受け取ろうとしてるのですが 平仮名片仮名がフルパスやファイル名に含まれているとエラーが出て開けません argv[1]からフルパス受け取ると2バイト文字は扱えないのでしょうか? ユニコード文字、マルチバイト文字の二つのコンパイルを試しましたが駄目でした。
334 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:17:06 ] 受け取れる ドラックや入力する時点で空白で分離されているのでは
335 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:18:51 ] >>332 空行やコメントのみの行を除外したり、 関数の中身のみの行数を数えたり、とか、 いろいろしたいとなると wc だけじゃ辛いかもね。
336 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:19:58 ] >>333 VC2005 の fstream には日本語ファイル開けないバグがある。 www.google.co.jp/search?q=vc2005+fstream+setlocale
337 名前:333 mailto:sage [2007/12/15(土) 17:23:09 ] >>334 >>336 回答ありがとうございます。 VC2005特有の症状ってことですかね、検索しても全然わからないで困り果てていたので助かりました。
338 名前:331 [2007/12/15(土) 17:29:46 ] >>332 >>335 ありがとう。なんとかなった
339 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:30:57 ] >>327 200でも-1でも0x7fffffffでもint n;Foo(n);でもコンパイル通ったよ。 ちなみにsizeof(Foo) == 4だった。 やっぱ列挙型引数でも範囲外チェックしなければいかんのかね…
340 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:28:20 ] >>339 >>327 で書いたのは規格の話。 コンパイルが通ろうが実行できようが、規格上はは未定義。 つまり0〜15以外の値については実装依存。
341 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:50:13 ] 列挙子って、少なくとも int 以上のサイズになるんじゃなかったっけ? 規格上は。
342 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:51:31 ] 規格の話してるんなら C か C++ か、章番号とか、ちゃんと示してくれ。
343 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:05:39 ] それを言うなら >340 だって
344 名前:デフォルトの名無しさん [2007/12/15(土) 19:07:00 ] >>343 文盲乙
345 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:09:23 ] アンカを付けないなら誤解される事は覚悟しなきゃダメだ。
346 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:10:15 ] まあ>>342 は規格の話してるんなら、って明言してるわけだし文盲乙は適当だな
347 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:17:16 ] そもそも >341 のみに対するレスか >340-341 の両方に対するレスかが不明
348 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:19:51 ] 規格の話って言ってるじゃん 両方というかすべてに対してとるべきだし、本人はとられることに文句は言えないと
349 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:27:34 ] VC2005でwcoutに出力しています。 全角などが含まれているとそれ以降wcoutが動作しなくなる問題があって >>333 さんの問題と同じ原因かと思うのですが、 特定のスレッドのみC++ロケールを変更するにはどうしたらよいのでしょうか? std::locale::global(std::locale("")); すると全スレッドに適用されてしまうので今回は使えません
350 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:32:13 ] wcoutを使わずcoutで処理する
351 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:32:50 ] locale 関連ってホンマ実装がいい加減なコンパイラが多くて困る。
352 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:33:36 ] 外国人が作っているからな゜
353 名前:339 mailto:sage [2007/12/15(土) 19:35:14 ] >>340 VCが規格違反しているわけではないってことでいいのかな? まあどちらにしてもコンパイル通る以上対策はせなあかんということだが… ともかくサンクス。
354 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:36:24 ] strがワイド文字のときの出力法 int n=WideCharToMultiByte(CP_ACP, 0, str, -1,NULL,0,NULL,NULL); char *putf = new char[n+1]; n=WideCharToMultiByte(CP_ACP,0,str,-1,putf,n,NULL,NULL); cout<<putf<<endl;
355 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:40:56 ] シャンピーとどいたー\(^o^)/
356 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:41:28 ] ごばくー/(^o^)\
357 名前:349 mailto:sage [2007/12/15(土) 19:53:53 ] cout << "うはwwwおkww"; ありがとうございます orz
358 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:09:37 ] 初心者ですお願いします 何も入力されてないの(エンターーのみ)をデータとして扱うにはどうしたらいいでしょうか? 初歩的ですいません
359 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:15:00 ] >>358 scanf("%d",・・・); みたいにしてるとか?
360 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:26:53 ] getch()の戻り値はエンターの時どうなんだろ
361 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:32:50 ] シャンピーとどいたー\(^o^)/
362 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:33:44 ] ごばくー/(^o^)\
363 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:41:01 ] >>359 yes
364 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:45:02 ] エンターいれっと普通に13返ってくるな
365 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:45:45 ] >>363 int n; char line[100]; fgets(line, sizeof(line), stdin); if (line[0] == '\n') { // エンターだけ } else { sscanf(line, "%d", &n) }
366 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 21:14:43 ] >>365 thanx
367 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 22:59:08 ] >>353 規格違反ではないね。実装依存だから何でもアリ。 VCの実装がそういうふうに対応しているという だけのことだね。
368 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 05:51:11 ] 質問です。 OSはMacOS X 104.11です。 #include <stdio.h> int main (int argc, char *argv[]){ fprintf(stdout, "%s¥n", argv[1]); return; } というプログラムを書いたのですが、 いざ実行させるときに、引数に 桜木 花道とやると、桜木 花道 桜木 花道とやると、桜木 しか出力されません。 なんとか回避したいのですが、どのようにすれば良いでしょうか?
369 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 05:55:25 ] 半角空白は区切られる あきらめろ
370 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 05:56:15 ] argv[2] も出力する
371 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 05:59:50 ] ああ、マジですかorz それって、OSのバグとかじゃなくて C言語の文字列の表現の仕様ですかね? 半角を入れると 桜木'¥0' 花道'¥0' ってなるんでしょうか?
372 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 06:15:23 ] そういうことだな
373 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 06:19:36 ] うはー、せっかくここまでプログラム書いて、バグつぶししていたときに、 こんな問題に出会うとは! どうしよう。鬱だ。寝よう。
374 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 08:13:42 ] >>368 program "桜木 花道"
375 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 08:47:55 ] >>371 C言語の文字列の表現の問題というよりは、コンソールの仕様(コマンドラインに入力した文字列を 半角で引数を区切る)かな。 自分でシェルを作って、引数の区切りを半角文字以外で指示できれば argv[1] = "桜木 花道" も可能だよ。 argv[]にどういう文字列が渡されるかもC言語の規格の範疇だっけ?
376 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 09:09:48 ] >>375 JIS規格見てみたが、「文字列へのポインタでなければならない」としか書いてないな。
377 名前:375 mailto:sage [2007/12/16(日) 09:20:01 ] >>374 に書いてあるように、わざわざ自前シェルを作らなくても たいていのプラットフォームでは "" で囲めば事足りるね。なぜか忘れてたorz
378 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 09:40:06 ] >>373 program "安西 先生"
379 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:06:12 ] #include <stdio.h> #include <string.h> int main (int argc, char *argv[]){ if (strcmp("安西 先生", argv[1]) == 0) { fprintf(stdout, "あきらめたら?\n"); } else { fprintf(stdout, "%s\n", argv[1]); } return 0; //mainの戻り値をint指定したら戻り値返さないとコンパイルエラー }
380 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:19:34 ] 今時のコンパイラはエラーになるのか
381 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:23:58 ] >>373 > うはー、せっかくここまでプログラム書いて、バグつぶししていたときに、 > こんな問題に出会うとは! > どうしよう。鬱だ。寝よう。 > >>368 のプログラムでそれは大げさだろ。>>370 がまっとうな解答だと思うが。 argc に情報あるんだし。
382 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 11:42:47 ] VS2005MFCですが、OnKeyDown()関数で受け取ったint型のアスキーコードを、 元の文字に変換してstd::string型の変数に代入するにはどうしたらいいですか? int n = 0x30; //キーボードの0を押下して得られるアスキーコード nをstring型の0に変換したい intからCString型の例は結構あちこちで、散見してるんですが・・・・
383 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 11:57:01 ] 382です自己解決しましたがもっといい方法があったら教えてください #include <iostream> #include "stdio.h" #include <string> int main() { int n = 0x30; std::string str; str = ( char )n; std::cout << str << std::endl; return 0; }
384 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 11:58:44 ] >>382 代入: s.assign(1, static_cast<char>(n)) 変換: std::string(1, static_cast<char>(n))
385 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 12:00:25 ] str = static_cast<char>(n) が正解だね。これに何か不満でもあるの?
386 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 12:05:56 ] >>384 >>385 サンクス
387 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:24:32 ] C一通りやったつもりでいるし解説も読んだんだけど未だよくわからない、その過程過程が載っているとこでもないだろうか int main (int argc, char *argv[]){←こいつなんですが エントリポイントの引数ってことは解説サイト等見たところでもプログラムが実行させる時に渡されるものだというのはわかりました。 また、形態が文字列で、スペースで区切られ、argv[]の要素数がargcに入るのもわかりました。 でもその、プログラムが実行するときに渡される、という意味がさっぱりわかりません 例えばなんらかのソフトウェアをダウンロードし、自身で使うとき(ブラウザでもマルチメディアプレーヤでもなんでも) .exeのファイルをクリックした際何かが渡っているんでしょうか? ダブルクリックをして起動するだけですし、だとすると明示的にint argc, char *argv[]と書かなくてもいいことになってしまいそうで すんごいこんがらがってます int main (int argc, char *argv[]){でぐぐると解説が結構出るのですがもうさっぱりです
388 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:42:53 ] >>387 例えばアイコンにファイルをD&Dして起動した場合、 argvにはそのファイルのパスが渡される。 コマンドプロンプトから起動する場合は、 任意のオプションを文字列として渡すことができる。
389 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:48:55 ] コマンドプロンプトやファイル名を指定して実行では、 hege.exe /x /yのように実行ファイルの後に文字列(コマンドライン引数)を指定できる。 これがCのプログラムでは、mainの引数で受け取れるということ。 Windowsでは関連付け起動、実行ファイルへのドロップ&ドロップ起動などでもコマンドライン引数が使われる。
390 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:59:43 ] >>388-389 早々にありがとうございます。 つまり先ほど例に出したものだと WebブラウザならばそいつにhtmlファイルをD&Dするとそのhtmlファイルのパスが渡り、ブラウザが起動し、そのhtmlの内容を表示するとか マルチメディアプレーヤなら音楽ファイルをD&Dするとその音楽ファイルのパスが渡り、プレーヤが起動し、その音楽が再生されるとか といった具合でしょうか
391 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 17:14:11 ] そういうこと。 ただし、ウインドウへのD&Dは全く別の仕組みなんで混同しないでね。
392 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 17:50:31 ] UNIX使うと良くわかる。 #include <stdio.h> int main (int argc, char *argv[]){ int i; printf("argc = %d¥n",argc); for(i = 0; i < argc;i++) printf("argv[%d]=%s¥n",i,argv[i]); } exit(0); } ちなみにここ最近でargv[]で何が出来ないこれが出来ないと質問してるのは俺! みんなありがとう!
393 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 17:53:31 ] returnいらないの?exitの定義知らないんであれだけど