1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
208 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:05:18 ] とりあえずさ、 >>190 のコードで実際にどんな値が入ってるか、確認してみれば? printf("%d" , str[1]); %cじゃなく%dで もし代入失敗してるなら代わりに何が入ってるか確認できるし
209 名前:デフォルトの名無しさん [2007/10/19(金) 12:12:01 ] >>207 機能として違うのはわかりますが、メモリの格納方式まで別々にする意味は何でしょう? 単に不便にしているだけとしか思えないのですが。 >>208 同じ値が入っていました。さすがにこれはおかしいと思い、VCのモードをReleaseに変えたら動きました。 しかし根本的な問題解決にはなっていません。何故こう無駄に不安定なのか…
210 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:27:50 ] 無駄じゃないだろ
211 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:30:35 ] >>209 「このモジュールはデバッグモードでコンパイルして こっちはリリースモードでコンパイルしないとダメだからな」 嫌すぎる…
212 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:22:06 ] >>209 文字列リテラルを使うときに、メモリを節約できるから。 つまり、次のコードは、同じ値を出力するかもしれない。 # コンパイラとオプションによって変わる -- void exsample() { const char * foo = "abcde"; const char * bar = "abcde"; printf("%p, %p\n", foo, bar); } -- 勿論、次のコードは只の配列だから違う値が出力される。 void exsample2() { char foo[] = "abcde"; char bar[] = "abcde"; printf("%p, %p\n", foo, bar); }
213 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:23:23 ] げ、どうでもいいけど関数名がtypoだ _/ ̄|◯
214 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:29:26 ] 自分が間違ってんのに仕様の方に文句をつけるやつは、Cどころか学習自体に向いてないよ
215 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:56:58 ] 新しい言語作ればいいと思うよ
216 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 15:42:13 ] #include <stdio.h> int main (void){ double a,b,c,x; printf("Please type 1st Number >> "); scanf("%xf",&a); printf("Please type 2nd Number >> "); scanf("%xf",&b); printf("Please type 3rd Number >> "); scanf("%xf",&c); x=(a+b+c)/3; printf("Average = %xf\n",x); return 0; } なぜか、計算結果が違う・・・ %f が違うんでしょうか?
217 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 15:46:25 ] >>216 %xf を %lf にしてみたらどうかな?
218 名前:215 mailto:sage [2007/10/19(金) 16:07:13 ] >216 ありがとうございました。
219 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 20:17:42 ] >>201 文字列リテラルの内容を書き替えるプログラムの挙動は未定義。 文字列リテラルの型はchar配列となっているが、これは過去との互換性のため。 蛇足だがC++ではconst charの配列となっている。 (ただし、またも互換性のためchar*への型変換は定義さらている) >>206 組み込みではROMに配置できるようになる。 Windowsなど高水準なOSでは、規格の規定から 文字列リテラルの書換はするべきでないと 認知されているため、文字列リテラルが 格納されている辺りを読取専用にする。
220 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 21:09:41 ] まぁ結局ROMに配置すんのもメモリの節約だし、 「メモリの節約のため」でまとめちゃってもいい気もするけどね。 なんかメモリの節約以外の理由で文字列リテラルはROMのが良い理由があったら、 後学のために教えたって欲しいかも。
221 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 21:39:11 ] まぁROMは遅いから結局実行時にRAMにコピーしちゃったりるすんだけどね
222 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 22:18:08 ] 開いたりしていないファイルポインタを fclose(fp); とすると、どうなるのでしょうか?
223 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 22:21:13 ] fclose関数でエラーが返されると思います。
224 名前:デフォルトの名無しさん [2007/10/20(土) 12:19:02 ] >>222 詳しく言うと、エラー時にはEOFが返される。 成功時は0が返される。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:31:04 ] その前に開いてない fp ってどっから持ってくるんだ NULLかゴミ値じゃねぇの?
226 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:47:34 ] FreeBSD系だとfcloseにNULLを渡したら例外が起きるらしい。 以下はMac OS X Tigerのfclose(3)から引用 > The fclose() function does not handle NULL arguments; they will result in > a segmentation violation. This is intentional - it makes it easier to > make sure programs written under FreeBSD are bug free. This behaviour is > an implementation detail, and programs should not rely upon it. 実際にfcloseにNULLを渡してみたらsegvが発生した。 おっしゃるとおりの御利益はあるかもしらんが、ちゃんと規格に準拠しようぜ…
227 名前:デフォルトの名無しさん [2007/10/20(土) 18:16:47 ] 例えば const char test[] = {"abcdef"}; で cとdの間に0x04を入れたい場合どう書けばよいのでしょうか
228 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:31:08 ] "abc\x04def"
229 名前:227 [2007/10/20(土) 18:42:47 ] 了解
230 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:12:41 ] "abc\04def"とも書けなっかったかな。 \04は8進表記。
231 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:04:00 ] doble型の変数をprintfで表示するときには整数で表示するにはどうしたらいいですか?
232 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:08:21 ] double x = 1; printf("%d\n", (int)x); こうか?
233 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:08:42 ] >>231 %.0f
234 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:09:56 ] >>232 >>233 どちらでもできました!ありがとうございました
235 名前:デフォルトの名無しさん [2007/10/20(土) 20:30:34 ] 今までCとC++は同じものだと思っていたけれど、 MFCを使ったC++プログラミングは、C言語と似ているようで 似ていないですね。
236 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:36:52 ] C++はCの拡張だから、Cと同じように書くこともできる 単にC++をCとして使ってただけだろ
237 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:37:27 ] BetterC
238 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:40:47 ] CとC++は全然違う言語だと思ってもいいよ クラス、例外処理、テンプレート、新たに覚えることはたくさんある
239 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 21:02:21 ] >>238 の言うとおり、別物と認識した方がいい。 同じだと思っている人と一緒に仕事するとよーっくその事を実感することになる。
240 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 23:10:59 ] 引数の数が可変の関数の作り方を勉強したのだが、 printfって、%fでdouble型もfloat型も受けるよな? それが、よく分らなくなった。 double型とfloat型って、サイズが違うはずだから、 引数から取り出すとき、区別がつかなくて、おかしくならないか?
241 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 23:13:34 ] www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html というわけで、可変引数だと暗黙的にfloatはdoubleに変換されるらしい
242 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 23:13:52 ] 可変引数では int以下→int、float→double になる
243 名前:デフォルトの名無しさん [2007/10/20(土) 23:50:12 ] >>240 でもそういうのってコンパイラによって違うのでは? それってANSI Cで決められてたっけ?
244 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:07:10 ] >>243 ANSIというか規格で決まっている。 floatは受ける型がわからない関数に渡されるときはdoubleに格上げされる。 これはプロトタイプの与えられていない関数の引数、あるいは可変引数のときに起こる。 なので、printfに渡すときはfloatもdoubleもどちらもdoubleとして渡されることになる。 似たようなことがcharにも言えて、これはintに格上げされる。
245 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 01:21:25 ] ちょっと聞きたいんだけど #include "myheader.h" int main(){ int list_num[100]; FILE *fp; int i; char buf[100][30]; というプログラムの最初の部分において gcc -c main.c main.c: 関数 `fgword' 内: main.c:3: error: 文法エラー before '{' token main.c:9: error: 文法エラー before "fp" make: *** [main.o] エラー 1 main関数内でいきなりこういうエラーがでるんだけど どういうことなんでしょうか? main関数内にfgwordは使ってないんですけど
246 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 01:22:49 ] たぶん myheader.h の中がおかしい
247 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 01:35:24 ] myheader.hの中身のプロトタイプの int fgword(int); にセミコロンがなかったからこういうエラーがでたようです。 ありがとうございます。 突然こんなエラーでてきてびびった。
248 名前:デフォルトの名無しさん [2007/10/21(日) 03:41:30 ] デスクトップパソコンで 処理させるのと ノートパソコンで処理 させるのと 音が違うな。 デスクトップはうるさくてやってられない。 実行に10分くらいかかるプログラムを動かしてるとき デスクトップだとかなり沸いてくるし。
249 名前:デフォルトの名無しさん mailto:age [2007/10/21(日) 03:45:40 ] videointroplayer.web.fc2.com/v.htm?ii9YN1kO-TK36%+8mdKsm-z3pn32%+WhqyiIrhz0F110%+iwCjWdz0Gid150%+Kjtps4byn7a119%+@1@_%E4%BC%9A%E9%95%B7%E7%89%A9%E8%AA%9E
250 名前:デフォルトの名無しさん [2007/10/21(日) 12:38:50 ] 1bitのファイルはつくれるんでしょうか? charだと8bitになってしまいます
251 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 12:39:12 ] char* ch; ch = "test1"; ch = "test2"; ↑で"test2"を代入した時点でメモリリークしてますか?
252 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 13:11:01 ] >>251 メモリリークの意味を考えてください 確保したメモリを使用後も開放せずにいることですよ で、それは該当すると思いますか? そもそも領域確保していないのに
253 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 13:13:03 ] >>251 「動的に」が抜けてた 静的に確保されたものは終了後、自動的に開放されます
254 名前:デフォルトの名無しさん [2007/10/21(日) 13:59:07 ] スレッドが開始される前に、mainで全ての処理を終えてしまうようです そのためスレッド稼働中の判定がうまくいきません どうしたらいいですか? #include <process.h> #include <stdio.h> #include <windows.h> void fnc(void *p){ int m=(int) p; Sleep(m*400); printf("%d end\n",m);} main(){ HANDLE m[10]; DWORD tp[10]; int n=0,k; for(k=0;k<10;k++)tp[k]=0;k=0; while(n<100){ GetExitCodeThread(m[k], &tp[k]); if(tp[k]!= STILL_ACTIVE){ m[k]=reinterpret_cast<HANDLE>(_beginthread(fnc, 0, (void *)n));n++;} k++;} Sleep(10000);}
255 名前:254 [2007/10/21(日) 14:04:27 ] まちがえました
256 名前:254 [2007/10/21(日) 14:11:11 ] HANDLE m; DWORD flg; m=reinterpret_cast<HANDLE>(_beginthread(fnc, 0, NULL)); このようにスレッドを開始したとき、スレッドが終わると次の関数を終了コードを返すはずですよね? GetExitCodeThread(m, &flg); なんかいつまでもアクティブのままなんですが
257 名前:254 [2007/10/21(日) 14:18:10 ] _beginthreadは終了しても終了コード返しませんか?
258 名前:デフォルトの名無しさん [2007/10/21(日) 14:20:02 ] なんかクリエイトスレッドは、不都合があるってかいてあったんですけどこっちのほうがいいですか?
259 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:29:28 ] msdn2.microsoft.com/ja-jp/library/kdzttdcb (VS.80).aspx >start_address で起動されるルーチンは、__cdecl 呼び出し規約を使用する必要があり、戻り値を持つことはできません。
260 名前:デフォルトの名無しさん [2007/10/21(日) 14:36:49 ] _beginthreadexを使ったらうまくいきました
261 名前:デフォルトの名無しさん [2007/10/21(日) 14:56:09 ] 質問なんですけど、全てのスレッドが終了したら停止したいんですけど、最後の部分の判定は駄目なんでしょうか? なんか作業が終わる前に停止してしまいます #include <process.h> #include <stdio.h> #include <windows.h> #define ThreadNum 100 unsigned __stdcall fnc(void* p){ int m=(int) p; Sleep((m%10)*10); printf("%d end\n",m);} main(){ HANDLE m[ThreadNum]; DWORD tp[ThreadNum]; int n=0,k; for(k=0;k<ThreadNum;k++)tp[k]=100;k=0; while(n<100){ GetExitCodeThread(m[k], &tp[k]); if(tp[k]!= STILL_ACTIVE){ m[k]=reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, fnc, (void*)n, 0 ,NULL));n++;} k++;if(k>=ThreadNum)k=0;} do{n=0; for(k=0;k<ThreadNum;k++){ GetExitCodeThread(m[k], &tp[k]); if(tp[k]!= STILL_ACTIVE)n++;} }while(n>=ThreadNum); }
262 名前:デフォルトの名無しさん [2007/10/21(日) 14:57:22 ] すべてのスレッドがアクティブでは無いとすれば、作業が全てすんでいると思うのですが
263 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:57:52 ] いい加減スレ違いだって気づけ
264 名前:デフォルトの名無しさん [2007/10/21(日) 14:58:41 ] すみません 解決しました 一番最後は while(n<ThreadNum); でした
265 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:19:53 ] 停止を待つなら for(n=0; n<ThreadNum; n++) { if(m[n]) WaitForSingleObject(m[n], INFINITE); } というかreinterpret_castってC++じゃねーかww
266 名前:デフォルトの名無しさん [2007/10/21(日) 15:30:27 ] >>265 それはEXではない方の場合でしょうか?
267 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:34:46 ] マルチスレッドという時点でVisual C++依存 よってCの範疇ではないのでスレ違い
268 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:46:23 ] マルチスレッドなんて素人が無理に使うもんじゃないよ。
269 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:16:06 ] こういう簡単なポインタに関するプログラムがあるんですが、 実行するマシンによって(無論コンパイルはそのコンピュータ上でやり直している) 値が変動したりしなかったりします。 どうしてでしょうか? --------------------------------------------------- #include <stdio.h> main(){ int i,*x; x=&i; *x=1; printf("x=%o *x=%d\n",x,*x); } --------------------------------------------------- コンパイルコマンドは gcc hoge.c 以下は4回分の出力を横に並べたもの Fedora7 x=27775464634 *x=1, x=27747676054 *x=1, x=27773760474 *x=1, x=27764163514 *x=1 Vine x=27767545704 *x=1, x=27770645104 *x=1, x=27777542624 *x=1, x=27775054324 *x=1 OS X(10.3) x=27777776240 *x=1, x=27777776240 *x=1, x=27777776240 *x=1, x=27777776240 *x=1 HP-UX x=17777772540 *x=1, x=17777772540 *x=1, x=17777772540 *x=1, x=17777772540 *x=1
270 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:19:54 ] *xの値が変わってないんならどうでもいいことじゃね?
271 名前:デフォルトの名無しさん [2007/10/21(日) 16:21:56 ] OSのメモリ管理法にもよるだろ。
272 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:24:15 ] >>269 xは変数iのアドレス(スタック上の) OSによって異なるだろうし、同じOSでもコンパイラによっても異なる
273 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:27:19 ] 質問があるんですが int input(char *pstr1) { char *ppstr1; fgets(pstr1,SIZE_ARR,stdin); fflush(stdin); ppstr1=strchr(pstr1,'\n'); if(ppstr1!=NULL){ *ppstr1='\0';} return 0; } このコードは、fgets関数で読み込んだ文字列から改行記号を探し ヌル文字と改行文字を入れ替えをするということをしてるんですが 「*ppstr1='\0';」は、なぜ間接演算子抜きの「ppstr1='\0';」ではダメなんでしょうか ご教示ください
274 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:30:24 ] >>270-272 なるほど、ありがとうございました。
275 名前:デフォルトの名無しさん [2007/10/21(日) 16:39:43 ] >>273 strchrは見つかった場所へのポインタを返すから、char *型のppstr1で受け取ってるだろ? char *型、つまりアドレスを表してるわけだから、ppstr1だけだと、その見つかった場所のアドレスになるんだ。 だから、アドレスを書き換えても意味がない。 ここでやりたいのは改行をヌル文字に変える作業だから、ppstr1というポインタを介して値を変更しないといけない。 だから、間接参照演算子を使って代入作業を行わないと駄目ってこと。
276 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:43:25 ] >>273 ところでstdinからfgetsで取得したデータの改行は\0に変換されていなかったっけ? まちがっていたらソマソ
277 名前:デフォルトの名無しさん [2007/10/21(日) 16:45:34 ] >>276 変換というより、最後に\0を付加するんだよ。
278 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:49:55 ] >>276 そいつは多分getsと勘違いしてるとオモ。 getsは最後の改行コードを文字列に含まない。 fgetsは改行コードを文字列に含む。
279 名前:276 mailto:sage [2007/10/21(日) 16:54:10 ] >>278 なるほど納得
280 名前:273 mailto:sage [2007/10/21(日) 16:56:00 ] >>275 なるほど・・・ 易しい説明どうもありがとうございました!
281 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:58:54 ] 地銀はマーチが多いよ
282 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:00:34 ] ↑誤爆
283 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:00:41 ] 大文字か小文字かどっちだ?
284 名前:デフォルトの名無しさん [2007/10/21(日) 17:34:01 ] 一般的に、スレッドの関数はインライン展開できますか?
285 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:40:37 ] >>284 日本語でおk
286 名前:デフォルトの名無しさん [2007/10/21(日) 17:41:03 ] for ( k=0; k<10; k++ ) x+=f(k); というのはインライン展開しませんか? x= f(0) + f(1) + ・・・ だとインライン展開しますか?
287 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:46:41 ] 内部でfor, while, switchを使った関数はinllineの指定をしてもinline展開されないみたいだよ
288 名前:デフォルトの名無しさん [2007/10/21(日) 17:48:40 ] それならprintfを使っても駄目ですよね
289 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:17:10 ] 初歩的な問題ですみません。 等比数列の初項aと公比rを入力し、格項の値とn項までの総和を計算し出力せよ。ただし、r!=1とする。(for文を使用する) 等比数列: a, ar, ar^2,・・・・・ar^(n-1) 等比数列の和:Sn=a+ar+ar^2+・・・・+ar^(n-1) for文の部分だけでもお願いします。
290 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:18:41 ] それは質問じゃないだろ 宿題スレ行け
291 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:22:34 ] >>288 printfは非inlineな関数だから関係ないような気がするけど…。
292 名前:デフォルトの名無しさん [2007/10/21(日) 20:22:44 ] >>290 申し訳ない。宿題スレの存在しらなかったっす
293 名前:名無し [2007/10/21(日) 21:58:06 ] 配列名のsumって何?
294 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:01:21 ] 英和辞書にでも聞け
295 名前:名無し [2007/10/21(日) 22:12:13 ] なるほど。
296 名前:デフォルトの名無しさん [2007/10/22(月) 15:14:45 ] void add1(int i); int add2(int i); void add3(int *p); int main(void) { int n; /* n の値の変化に注目する */ printf("Input integer: "); scanf("%d", &n); printf("Original: %d \n", n); ???????; /* 関数add1 に nを適用する */ printf("After Add1: %d \n", n); /* 関数add1 を適用した後の nを表示する */ printf("Add2: %d \n", ???????); /* nを適用した関数add2 の値を表示する */ printf("After Add2: %d \n", n); /* 関数add2 を適用した後の nを表示する */ ???????; /* 関数add3 に nを適用する */ printf("After Add3: %d \n", n); /* 関数add3 を適用した後の nを表示する */ return 0; } void add1(int i) /* i に1を加えて,表示する */ { ???????} int add2(int i) /* i に1を加えた値を返す */ { ??????? } void add3(int *p) /* ポインタの指す値に1を加えて,表示する */ { ??????? } ????の部分を埋めてください。
297 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 15:17:57 ] そういうのは宿題スレへ pc11.2ch.net/test/read.cgi/tech/1191937213/
298 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 16:09:03 ] VS2005でC言語の勉強をしています。 char str[]="日本語"; のような感じで、文字列リテラルとしてUTF-8を指定することは可能でしょうか? ソースの文字コードをUTF-8にしても、strにはSJISのコードが入ります。
299 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:15:23 ] wchar_t str[] = L"日本語"; で UNICODE が使える。文字コードは処理系依存 どうしても UTF8 が必要なら変換するしかないと思う。
300 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:27:11 ] 配列を大量に使ってプログラム書いてるときに気をつけないといけないことはなに? 領域こえたらセグメンテーションでるのはわかる。
301 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:29:18 ] >>300 全然分かってないじゃん
302 名前:それはセグメンテーションフォルトだろう mailto:sage [2007/10/22(月) 18:30:41 ] >>300 おまえは何か勘違いしている。領域を越えたらセグメンテーションが出ると言うわけではない。
303 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:40:05 ] わかってないからきいてんじゃん
304 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:42:01 ] 配列を大量に使うプログラムにろくなのが無いこと
305 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:43:36 ] あれをリストで実装はできない
306 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:46:45 ] どんなアルゴリズム?
307 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:18:18 ] 配列好きだけど 総素数の最大数が分かっているときはリストなどより配列を使ったほうが プログラムは簡単になるし、性能もいいのができる。 ただし、以下のことは注意しなくてはいけない。 1.要素数の最大値が決まっていないとき 最大数を超えたときにリアロケートするという手もあるが、そういう時はリストにする。 2.中身がスカスカの配列 メモリーの無駄。メモリーが十分あればそれでも良い。 3.配列が確保できない スタック上に配列を作成するときはよくある。 こういうときはヒープは外部変数にとる。
308 名前:デフォルトの名無しさん [2007/10/22(月) 22:40:56 ] fgetsで入力のおわりを'\0'にする方法ってありますか? scanfだと空入力したとき結果が出ないし getsは禁止らしいので fgetsしか使う方法がないのですが・・・