1 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:11:47 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 24 pc11.2ch.net/test/read.cgi/tech/1201083176/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 104代目 pc11.2ch.net/test/read.cgi/tech/1202135539/
2 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:09:53 ] Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/ Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/ Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/ Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/ Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/ Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/ Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
3 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:10:50 ] Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/ Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/ Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/ Part 15 ttp://pc11.2ch.net/test/read.cgi/tech/1182719692/ Part 16 ttp://pc11.2ch.net/test/read.cgi/tech/1184003625/ Part 17 ttp://pc11.2ch.net/test/read.cgi/tech/1185286631/ Part 18 ttp://pc11.2ch.net/test/read.cgi/tech/1187213990/ Part 19 ttp://pc11.2ch.net/test/read.cgi/tech/1190342593/ Part 20 ttp://pc11.2ch.net/test/read.cgi/tech/1192455273/ Part 21 ttp://pc11.2ch.net/test/read.cgi/tech/1194384258/ Part 22 ttp://pc11.2ch.net/test/read.cgi/tech/1196489491/ Part 23 ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/
4 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:12:55 ] >>3 ミスった × Part 23 ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/ ○ Part 23 ttp://pc11.2ch.net/test/read.cgi/tech/1198295362/
5 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:29:43 ] 過去スレってなんか意味あるのか。
6 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:46:32 ] なんだ初心者か。
7 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:56:21 ] ほとんどdat落ちしてるし前スレのみでいいんじゃね? ●もちなんかレアだろうし
8 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:01:15 ] ●なくても見れるよ
9 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:08:42 ] それ以前に、読むやついるのかって疑問も。
10 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:52:43 ] 読むことは無くても検索する事ならあるかもしれない
11 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 03:29:29 ] たかだか2レス程度の過去スレリンクにけちつけるヤツってなんなの?
12 名前:デフォルトの名無しさん [2008/02/19(火) 11:02:18 ] そういう人に限って過去スレよめっていうんじゃない?
13 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 15:51:40 ] C:\Program Files\Microsoft Visual Studio 8\VC\C> test24.c #include<stdio.h> #include"myfunc.h" { ...... } myfunc.c myfunc.h 環境 VC++ 2005 express edition コマンドプロントでのリンクの方法おすえて。
14 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 16:12:24 ] cl で拡張子まで指定すりゃリンクまでやってくれるよ。
15 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 16:14:34 ] まあLINKでもいいけど。 オプションはGUIのほうでプロパティのリンカのコマンドラインみればわかるべ。 まああれ全部指定する必要も無いかもだが。
16 名前:13 mailto:sage [2008/02/19(火) 17:19:51 ] cl teste.c myfunc.c でけますた ありがとう あいしてる・
17 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:16:35 ] >>12 反論できなくなると人格攻撃はじめるクセってみっともないから、直す努力したほうがいいよ。 まあ、そういう根性が染みついちゃってて、一生ゲスのまま終わっちゃうんだろうけどね。
18 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:09:22 ] >>17 わざわざ同じレベルまで降りてやることもあるまいに。
19 名前:デフォルトの名無しさん [2008/02/20(水) 02:03:36 ] >>17 12だがなんのこっちゃ?
20 名前:デフォルトの名無しさん [2008/02/20(水) 02:50:57 ] >>11 >たかだか2レス程度の過去スレリンクにけちつけるヤツってなんなの? ?例えば、ですが… 2ch-browserの購入installを試みては… r
21 名前:デフォルトの名無しさん [2008/02/20(水) 05:31:03 ] ポインタへの代入についての質問です。 const char**型の変数にchar **型の変数を代入するのは、 修飾型へのポインタに非修飾型へのポインタを代入することになるので してはいけない(コンパイラが警告を出す)と本に出ていたので、 #include<stdio.h> int foo(const char **p){ printf("ok\n"); return 0; } int main(int argc,char **argv){ foo(argv); return 0; } 上記のようにコーディングしてコンパイルしてみたのですが、 警告の類はでません(argcとpが参照されていないという 警告と標準ライブラリ関数のプロトタイプ宣言に関する 警告は出ます)。コンパイラはvisual studio2005に付属 しているもので/Wallオプションを付けてます。 なぜ警告がでないのでしょうか?
22 名前:デフォルトの名無しさん [2008/02/20(水) 08:32:15 ] >>21 国語の勉強してから、もう一度その本を読め。
23 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 09:23:14 ] >>21 > const char**型の変数にchar **型の変数を代入するのは、 その代入をしていないから
24 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 11:06:50 ] >const char**型の変数にchar **型の変数を代入するのは、 >修飾型へのポインタに非修飾型へのポインタを代入することになるので >してはいけない(コンパイラが警告を出す)と本に出ていたので、 いいえ、そんな大嘘ありえません。
25 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 13:55:21 ] いや、警告が出ないのは不思議。gccでも警告が出る。 VC++ならC++としてコンパイルすればエラーになるんだけど。 で、どういう問題があるんだったっけとググったら、ちょうどいい例が見付かった。 ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200410/04100047.txt int main() { const char c='c'; char *x; const char **y=&x; // error // もしできたとしたら、以下の手順で c を変更できちゃう *y=&c; *x='b'; }
26 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:02:40 ] >>25 質問の大元では関数の引数として const 修飾を使っている
27 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:19:49 ] const char ** に char ** を代入することは、 「修飾型へのポインタヘのポインタ」に「非修飾型へのポインタへのポインタ」を代入することだから、 >21にあるような「修飾型へのポインタ」に「非修飾型へのポインタ」を代入することとはならないな。
28 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:00:03 ] ぶっちゃけ動くならコードなんかどうでもいいですよね?
29 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:02:13 ] メンテナンスを考えなくていいならな
30 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:03:52 ] 偶然動いてるのときちんと動いてるのと区別がちゃんとつくんならな。
31 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:04:20 ] こういうのは自分だけで使うのか、他人に提供するのかでもかわってくるしな。
32 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:10:12 ] >>26 x がグローバル変数なら似た事ができる。
33 名前:21 [2008/02/20(水) 22:26:14 ] >>24 >>27 そうですね、 「修飾型へのポインタヘのポインタ」に「非修飾型へのポインタへのポインタ」を代入することでした。 >>25 確かににgccでコンパイルしてみたら警告がでました。 リンク先、参考になりました。ありがとうございます。 >>26 関数に引数を渡すのは、仮引数への代入として扱われるらしいので代入と書きました。わかりにくくて すいません。 >>29 >>30 とりあえず、きちんとわかるまではエラーが出るような書き方は避けるようにしときます。
34 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:28:31 ] 関数に引数を渡すのは、仮引数への代入ではなく初期化。
35 名前:21 [2008/02/20(水) 22:28:36 ] >>31 エラーじゃなくて警告でした。
36 名前:21 [2008/02/20(水) 22:29:26 ] あ、そうですね。 代入だと、constつけたらできないですね。
37 名前:デフォルトの名無しさん [2008/02/21(木) 00:43:17 ] static関数はそのファイルでしか有効じゃないんですよね。 じゃあ、そのファイルでしか使用しない関数はstaticにしておけば、 関数名の衝突の心配が無くていいかと思うんです。 でも、そうしたらほとんどの関数がstaticになってなんか格好悪いんですけど。 そういうものですか?
38 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:45:00 ] staticの何が格好悪いんだ
39 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:46:37 ] >>38 いや、なんとなくです。 サンプルソースとか見ても、普通はそんなにstaticがついていない気がするし。
40 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:47:11 ] 普通そんなに関数名衝突しないだろ
41 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:47:23 ] サンプルは適当に作ってるから書いてない事もある。 真面目に書く場合は公開しない関数には static を付けるのが普通。
42 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 01:03:34 ] static付けたプロトタイプ宣言を書いといて、 定義は付けずに書けばどう?
43 名前:デフォルトの名無しさん [2008/02/21(木) 02:12:09 ] これに於いて "スタック領域 戻り番地3 変数 戻り番地2 戻り番地1 " 戻り番地とは、どういう意味なんでしょうか?
44 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:15:07 ] retで戻る場所
45 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:16:18 ] 関数から帰ってきて再開する場所 void g() {...} void f(){ g() ; r1: g() ; r2: } 上のgの中を実行中は "スタック領域 r1 下のgの中を実行中は "スタック領域 r2 f内の中を実行中はスタック領域=空
46 名前:43 [2008/02/21(木) 02:16:50 ] >>44 ん???
47 名前:43 [2008/02/21(木) 02:19:26 ] >>45 詳しく、ありがとうございます ですが、どうしてこれが”戻る”っているのでしょうか?
48 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:21:29 ] if(argc > 1) とは、argcが1より大きければ〜でしょうかね
49 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:24:56 ] >>47 関数gにいってr1またはr2に戻ってくるから
50 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:26:59 ] >>48 そのとおりだ、見ての通りだ 引数一個の時は、実行ファイル名と引数合わせて二個、argc==2だから注意しろ
51 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:28:31 ] >>50 さんくすです
52 名前:43 [2008/02/21(木) 02:33:49 ] >>49 ですが、これだと戻り番地が複数ありますよね??? "スタック領域 戻り番地3 変数 戻り番地2 戻り番地1 "
53 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:37:45 ] >>52 あなたが手を出すには、まだ早すぎるのかも知れません どんなに説明していても、読まないみたいだし
54 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:38:37 ] >>52 i() { 今ここを実行中、ここが終わったら"戻り番地3"へ } h() { i(); 戻り番地3: } g() { 変数宣言 変数 ; h(); 戻り番地2: } f() { g(); 戻り番地1: }
55 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:45:37 ] >>52 つまらないアドバイス プログラムに関数がなく、gotoだけで何とかしたいと思ったらどうする? 実際CPUによってはマシン語にgotoしかないケースもある、その代り今、実行している位置を変数に記録できるとする。 戻り番地はある種の変数だ。goto label のとび先 label を格納することができる。 これで関数同様の処理の流れを作ってみよ 一日ゆっくり頭を悩ませるがよい
56 名前:43 [2008/02/21(木) 03:58:14 ] >>53 確かに、まだレベルが達していませんでした。 >>54->>55 何とか何となくですが、理解できました。 gotoと参考書に載ってませんので、レベルを上げてから 深く考えてみます ありがとうございました。。。
57 名前:デフォルトの名無しさん [2008/02/21(木) 05:16:32 ] UNIXはCで作られているのでしょうか?
58 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 05:48:44 ] >>39 どのサンプルを見ているのか判らないけど、 汎用的なライブラリーとかソースみると間違いなく ファイル内で完結する関数、変数にはstaticついてるよ というかついてないと怖いと思う
59 名前:37 mailto:sage [2008/02/21(木) 09:56:06 ] >>58 なるほど。 そういうものってことですね。 ありがとうございました。
60 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:05:42 ] 整数型の変数に最大値以上の数を入れようとした時、影響があるのはその変数だけでしょうか? 例えばunsigned intの最大値で111...111となってる所に1を足したら000...000となってしまうみたいですが、 この時となりのメモリーに1が繰り上がってしまうってことはあるんでしょうか?
61 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:09:25 ] 配列使って試してみたら?
62 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:48:21 ] >>60 大丈夫、当該メンバ以外は影響受けません。
63 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:59:57 ] >>61-62 ありがとうございます。 なるほど、配列だと隣のメモリにおかれるから確認に使えるんですね。 自分でも試して見ます。
64 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:26:22 ] >>63 実践コードでは、良い悪いは抜きにして、それを前提にしたコードがかなりあるので確り覚えておくが吉。 二の補数でググッておけ
65 名前:ててて mailto:sage [2008/02/21(木) 18:24:29 ] memcmpについて質問です char *han1; char *han2; char temp1[81]; char temp2[81]; han1 = fgets(temp1,81,Fp1); han2 = fgets(temp2,81,Fp2); となっていた場合に文字数81は memcmp(han1,han2,81)と書いていいんでしょうか? 最後の文字のNULLを飛ばして80 memcmp(han1,han2,80)とどっちなのか悩んでいます 指摘お願いします
66 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:20:53 ] むしろstrncmp
67 名前:ててて mailto:sage [2008/02/21(木) 19:24:24 ] strncmpをmemcmpに変えてっていう問題なんです すみません
68 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:31:29 ] 試せば?
69 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:45:48 ] まぁ、80でいいけど81だろうな。
70 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:48:02 ] 実は80も81も不正解、な気がする。
71 名前:ててて mailto:sage [2008/02/21(木) 19:50:46 ] ええ!? ちなみに試せる環境がありません
72 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:06:50 ] そりゃぁ、strcmp()じゃない時点で不正解だ。
73 名前:ててて mailto:sage [2008/02/21(木) 20:09:26 ] ううむ まあとりあえず81って書いておきますw 情報ありがとうございましたw
74 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:12:23 ] 入力行が80文字未満だとtemp1 temp2にゴミが残るからねえ。
75 名前:ててて mailto:sage [2008/02/21(木) 20:18:34 ] とは思うんですが入力のほうは指定ないので少なく書いても幅が広がってしまうだけのようなきもするんですよね
76 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:29:08 ] >>75 memcmp(han1,han2,strlen(han1))
77 名前:デフォルトの名無しさん [2008/02/21(木) 22:33:13 ] #include <stdio.h> int main(void) { char str[80]; int i, spaces; char *p; printf("文字列を入力してください: "); gets(str); spaces = 0; p = str; while(*p){ if(*p==' ') spaces++; p++; /* このポインタのインクリメントは"*p++;"としても プログラムは正しく動作します。なぜですか?*/ } printf("スペースの数: %d", spaces); return 0; } すいません。教えてください。
78 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:38:43 ] * よりも ++ の方が演算の優先順位が上だから。 *p++ってのは*(p++)と等しい。
79 名前:77 [2008/02/21(木) 22:40:33 ] >>78 すばやい回答、ありがとうございました。m(_ _)m
80 名前:ててて mailto:sage [2008/02/21(木) 22:41:18 ] >>76 なんという そうかーなるほど・・・ うう、ひらめきって大事ですね
81 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:45:01 ] char temp1[81] = {'\0'};
82 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:46:58 ] >>81 temp1[81] == "abcde\0\0"; temp2[81] == "abcde\0f"; このとき文字列としては
83 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:48:12 ] 途中で送信してもうた... >>82 のとき文字列としては等価と判定せねばなるまい
84 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:40:51 ] memcmp(han1,han2,strlen(han1))の場合 han1が多い時とhan2が多いときで誤差でない?
85 名前:76 mailto:sage [2008/02/21(木) 23:44:50 ] >>80 訂正 memcmp(han1,han2,strlen(han1)+1)
86 名前:84 mailto:sage [2008/02/22(金) 00:27:26 ] han1が10文字 han2が20文字 han1が20文字 han2が10文字 の時にmemcmpだとゴミが入ってしまって無理じゃないかね?ってことね
87 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:29:37 ] 違いを検出するだけでいいなら、memcmp()でも問題ないね。
88 名前:ててて mailto:sage [2008/02/22(金) 09:57:29 ] han1 = fgets(temp1,81,Fp1); han2 = fgets(temp2,81,Fp2); と、なっているところでテキストファイル同士比べる時に、 han1 = [aaaaaaaaaa] han2 = [aaaaaaaa] などなっていても実際80文字分(1行分?)までの区切りなので初期化する必要ってありますか? 一応比較して結果が0なら比較内容同じ、-1か1なら違うとでるようにするだけなのでfgetの文字数と同じなら大丈夫な気がするような・・・
89 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:00:40 ] 短いほうが\0で終わってるわけだから そこまでが同じならば短いほうが小さい、という結果になる なのでどっちの長さを指定してもいいが、\0まで含めることが必要。 \0を超えての比較は意味が無いので、バッファのサイズで比較するのは間違い。
90 名前:ててて mailto:sage [2008/02/22(金) 10:52:10 ] なるほど〜 それじゃあ、そろそろ答え81って書いて提出します みなさんのおかげでいろいろわかりました どうもありがとうございました
91 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:26:14 ] >>90 han1[]="abcd\0e"; han2[]="abcd\0f";
92 名前:ててて mailto:sage [2008/02/22(金) 12:21:24 ] >>91 の場の場合もあるにはありますよね そこら辺の指定はまったくないんですよね 問題文 以下のプログラムは起動時に指定された2つのテキストファイルを比較し、 違う行があればその行番号を表示するプログラムです。 空白部分を埋めて、プログラムを完成させなさい。 という文章で自分で strcmp のバージョンは穴埋めはできたと思います 問題2 問題1のプログラムにおいてstrcmpを使用して読み込んだ2つのレコードが同じかどうか判断しています これをmemcmpを利用したロジックに作り直しなさい それで比較する部分のstrcmpをmemcmpに変えて書いたんですが読み込みするテキストファイルの指定は全くありません それで文字列分指定すればいいかなーと思っていたんですが・・・ >>90 のようにそこまで深く考えたほうがいいのでしょうか? 意地悪問題すぎる
93 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:24:05 ] だから単に片方のをstrlen()+1すればいい strlenも使用不可なのかな?でも自作するくらいならmemcmpも使わんしなw
94 名前:ててて mailto:sage [2008/02/22(金) 13:40:00 ] >>93 strlenは使えます と言うか勘違いしてましたw それで当たってますね han1 = aaa\0 han2 = aaab\0 memcmp = (han1,han2,strlen(han+1)) だと返す変数0になりません? と勘違い 文字数で違うなら\0の部分で0以外返しますし 文字が違うならやっぱり0以外返しますね 答えにそうかいて出します ちゃんと理解して解決しました 本当にありがとうございます
95 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:47:49 ] 大きい二次元配列の初期化ってどうやればいいんですか? char buf2[20][20];char buf[256]; double dat[10000]; とかだったら。
96 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:06:36 ] >>95 ループで各要素に初期値を代入する。 2次元配列の場合は2重ループで初期値を代入する。 char buf[256];が文字列だったら、strcpy(buf, "");
97 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:09:13 ] その前に、本当に初期化する必要があるかどうかチェックしてね。 無駄に初期化する人が多いから。
98 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:15:11 ] >>96 それってstrcpy使う必要あるのか?
99 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:22:59 ] 初期化することって規約があることもあるんだぜ・・・。
100 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:25:44 ] 初期化する必要ない場合ってどういう場合? LINUXでいいデバッガない?
101 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:26:19 ] 初期化する必要ない場合は初期化する必要ない場合
102 名前:96 mailto:sage [2008/02/23(土) 02:26:53 ] >>98 ヌル文字での初期化の場合ね。 buf[0] = '\0' でもいいんだが、好みの問題。
103 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:29:08 ] double data[10000]={0}だと初期化できてないみたいなエラーでるけどこれは 範囲あるの?
104 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:29:32 ] >>102 最適化すればオーバーヘッドなくなるのかな? まぁもともと無視できるほどの差だろうけど
105 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:30:57 ] >>103 規格では全て 0 で初期化されるはずだが。 警告出すコンパイラならあるけど。 ただ、コンパイラが糞だと知らん。
106 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:34:47 ] セミコロンがないとかじゃないよな
107 名前:デフォルトの名無しさん [2008/02/23(土) 03:15:36 ] www.shinetworks.net/cgi-bin/img-up/src/1203703846656.jpg この、12行目〜16行目までの解説をお願い致します。 特に解らないのが、12行目の" if(argc > 1) { "の部分です。 配列argcが1より大きければ、と言う言でしょうか?
108 名前:デフォルトの名無しさん [2008/02/23(土) 03:19:31 ] コボラーさんがC言語覚えるのは結構大変?
109 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:19:36 ] 文字列の長さも確認せずに strcpy はやばいだろ。
110 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:20:38 ] 大変? とか気にしてる時点で脈は無いわ。
111 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:28:52 ] >>107 argcはコマンド引数の数+1。 コマンド行がhogeのときargcは1。 コマンド行がhoge arg1のときargcは2。 だからif(argc > 1)とはコマンド引数がひとつ以上あるということ。
112 名前:デフォルトの名無しさん [2008/02/23(土) 04:27:04 ] >>111 サンクスです
113 名前:デフォルトの名無しさん [2008/02/23(土) 04:28:35 ] >>111 >>だからif(argc > 1)とはコマンド引数がひとつ以上あるということ。 ないときは、あるんですかね?
114 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 04:31:58 ] ないときはないよ。そんときは、argcが1になる。
115 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 04:41:37 ] >だからif(argc > 1)とはコマンド引数がひとつ以上あるということ。 いや,2つ以上だろ.もしくは1つよりも多く.
116 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 04:42:24 ] argc==2なら引数は1だろ。
117 名前:デフォルトの名無しさん [2008/02/23(土) 05:09:25 ] ? ↓-此れは? 006: int main(int argc,char *argv[] ? >>113 ああああああぁぁあぁ… 永遠に繋げていく事か"! ? if( argc > 1, argv > 1, argc > 1) = argc[1] ?
118 名前:デフォルトの名無しさん [2008/02/23(土) 06:45:19 ] 頭が混乱してきた…整理ついたら、出直してきます ありがとうございました