[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 23:17 / Filesize : 116 KB / Number-of Response : 449
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 17



1 名前:デフォルトの名無しさん mailto:age [2007/07/24(火) 23:17:11 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 16
pc11.2ch.net/test/read.cgi/tech/1184003625/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 93代目
pc11.2ch.net/test/read.cgi/tech/1184506311/

374 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 14:58:37 ]
ポインタについて質問なのですが、軽くググった感じではポインタとは
ガーベッジコレクタを利用した変数という認識で良いのでしょうか

375 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:06:18 ]
全然違います。
アドレスを保持する変数です。

376 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:06:38 ]
>>374
びっくりするぐらいダメ


377 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:06:54 ]
>>374
ぜーーーんぜん違いますw

ポインタ = 変数や関数のアドレスを格納した変数。値はつねにアドレスになる。


378 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:07:54 ]
なにこの同時ダメだしw ワロタ

379 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:08:42 ]
wwwwwwwwwwwwwwwwwwwwwwww

380 名前:374 mailto:sage [2007/08/03(金) 15:10:06 ]
私も吹きました。修行不足のようですね。出直してきます

381 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 15:45:39 ]
そもそもCにガベコレなんて無いし

382 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:50:41 ]
軽くググってガベージクレクタにたどり着いた道程に興味があります。



383 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:10:33 ]
童貞に興味があります

384 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:10:51 ]
>>383
いりますか?

385 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:10:59 ]
俺は無い

386 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 18:56:25 ]
質問です。
@wininetを使ってhtmファイルを読み込みtemp.htmで出力。
Aそのtemp.htmを読み込み、必要な部分をaaa.htmで出力。
ということをしたいのですが、1度ならできたのですが、
while文で2回以上ループさせると@のtemp.htmをwモードで
fopenするとエラーが出てうまくいきません。
一応大まかなソースを書いておきます。よろしくお願いします。

void create_htm(int times){
 FILE *wfp;
 FILE *rfp;
 if((wfp = fopen("temp.htm, "w")) == NULL){ ←2回目になるとここでエラーが発生し強制終了。しかしfprintfは実行されないまま。
  fprintf(stderr, "--- wfp error");
  exit(1);
 }
 get_htm(wfp, times); /*@の関数*/
 fclose(wfp);
 if((rfp = fopen("temp.htm", "r")) == NULL){
  fprintf(stderr, "--- rfp error times = %d", times);
  exit(2);
 }
 diet_htm(rfp, times); /*Aの関数*/
 fclose(rfp);
}

main(){
 int times;
 get_config(); /*gettimesをファイルから取得。gettimesはグローバル変数*/
 for(times = 0; times < gettimes; times--){
  create_htm(times);
 }
}

387 名前:386 mailto:sage [2007/08/03(金) 18:59:51 ]
すいません。while文ではなくfor文でループしてます。
mainのfor文はtimes--ではなくtimes++です。
よろしくおねがいします。

388 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 19:15:36 ]
問題の無い部分を手書きで書いて見せたって何にもならんと思うのだが。
せめてエラーのときはerrnoくらい出してよ。

389 名前:386 mailto:sage [2007/08/03(金) 19:35:44 ]
問題のある部分がcreate_htm関数のif((wfp = fopen("temp.htm, "w")) == NULL)
の部分でエラーが出るのですが。すみません。errnoはどのように出すのでしょうか。
ネットで調べてみて、問題のある部分のあとに書いたのですが、強制終了されるので
出力されないのですが。

390 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 19:53:26 ]
そもそもこれはファイル名の後に"が抜けててコンパイルもできないだろ
問題のあったソースをコピペすることもできんのか
エラー処理もしないでそこで落ちるというのはどうやって判明したんだ?

391 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 19:55:41 ]
強制終了って、アクセス違反?
どっかぜんぜん別のところでメモリ破壊を起こしてるのかもね。
get_htm や diet_htm の中身を見ないと解決できない気がする。
>>386に載ってる部分では特に問題なさげ。

392 名前:386 mailto:sage [2007/08/03(金) 20:05:19 ]
>>390
あ、すみません。抜けてました。
そこで落ちるというのは、一行ごとにprintfでどこがエラーかをみてみたら、
その部分でprintfがされなかったので判明しました。


>>391
メモリ破壊ですか。メモリ破壊を調べる方法とかないですか?




393 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 21:04:33 ]
gdb使えよ

394 名前:386 mailto:sage [2007/08/03(金) 21:48:16 ]
windowsでもgdbは使えますか?
turbo debuggerというので動かしてみると、例外が出たと言われました。

395 名前:デフォルトの名無しさん [2007/08/03(金) 21:56:31 ]
いまどきCなんて使う機会ってあるの?
OSを書く
組み込み系

これくらいにしか使わないよね

396 名前:386 mailto:sage [2007/08/03(金) 21:56:57 ]
何度も失礼します。
gdbをするには、gcc -g program.cをすればいいですよね?
でも、コンパイル時にwininet.hのInternetOpenなどでエラーが出るのですが
どうしたらいいですか?

397 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:03:15 ]
>>395
LinuxアプリとかR&Dとか

398 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 00:55:07 ]
>>396
そもそも何使って開発してるのよ。VCのデバッガ使えば?

399 名前:386 mailto:sage [2007/08/04(土) 01:06:28 ]
windows XP、bccを使っています。
すみません、自己解決できそうです。
メモリ破壊というものをネットで調べながらソースとにらめっこしてたら、
どうやら、Aの関数内でmallocでサイズを確保するときに、strlenではなく
sizeofを使ってしまっていたのが原因のようでした。お騒がせしました。
また、新たなエラーが発生した際にはお邪魔させていただきます。

400 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:12:41 ]
もう来るな

401 名前:デフォルトの名無しさん [2007/08/04(土) 01:13:26 ]
>>400
お前みたいな奴に質問に答えてもらわんでも結構、お前が来るな

402 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:14:47 ]
sizeofをどう使ってたんだ?



403 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:15:34 ]
>>400-401
邪魔

404 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:18:15 ]
>>402
ポインタに使ってばぐったんだろ。

405 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:19:16 ]
だから他の関数も最初から晒(ry

406 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 01:20:40 ]
>gdbをするには、gcc -g program.cをすればいいですよね?
>windows XP、bccを使っています。
質問される方の身になってください。

類似例
www.nicovideo.jp/watch/sm8005

407 名前:デフォルトの名無しさん [2007/08/04(土) 06:45:47 ]
>>403 お前も邪魔。いちいちうるせー

408 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:11:15 ]
>>407-408
邪魔

409 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 16:56:50 ]
質問ですが、

int main() {
int w;
printf("0から6までの整数を入力してください!\n");
scanf("%d",&w);
switch (w) {
case 0: printf("日曜日です。\n"); break;
case 1: printf("月曜日です。\n"); break;
case 2: printf("火曜日です。\n"); break;
case 3: printf("水曜日です。\n"); break;
case 4: printf("木曜日です。\n"); break;
case 5: printf("金曜日です。\n"); break;
case 6: printf("土曜日です。\n"); break;
default:printf("???\n");
} return 0; }

の4行目のscanfで("%d\n",&w)と間違えて打ったら2度入力が求められ、
結果には、1回目の入力が反映されました。なぜでしょうか?
使っているコンパイラはborland c++ 5.5.1で、OSはビスタです。



410 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 17:06:32 ]
>>409
scanf()は、エラーの場合、そのデータが取り除かれないで、入力ストリームに残ったままになるから。
エラー処理をしっかりしたかったら、scanf()は使わないほうがいいよ。

411 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 17:09:29 ]
>>409
scanfは"%d\n"の書式に合う文字列を入力したあとに改行が押されるまで待ってる
つまり1回目の改行は書式の中で要求されてるからそっちで使われていて2回目の改行でscanfが終了できる

412 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 17:16:33 ]
>>410, >>411
す、素早い!
ありがとうございます。勉強になった。



413 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 17:40:34 ]
scanf("%d\n", &w) の場合、%d と \n の2個分の入力が要る。

414 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:58:53 ]
マクロでこうゆうのは有りですか?(使われていたりしますか?)
※VFuncは動的引数持ちの関数

#define MACRO_HOGE(inA, inB)   inA = VFunc inB

-使用例-----------------------------------
void main(void){
int V;

MACRO_HOGE(V, (A, B, C));
}

例は適当に書きましたがようするにMACRO_HOGEの第2引数に"()"付きで複数の引数を書き並べることについてです。

415 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:08:35 ]
なんでまたそんなことをしたいと?

416 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:09:58 ]
>>414
(コーディング規約などで制限されていない限り)誰も止めはしないと思うよ。
デバッグ出力用途で時折見掛けるしね。

417 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:24:59 ]
>>414

×こうゆう
○こういう

418 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:29:40 ]
>>415
引数の数が不定の関数に対するマクロを作る必要がありました。
マクロの内容も実際には複数行にわたっており、その中でin_Aの値を使用するためこのような形になってしまっています。

>>416
製品に組み込まれるソースではなく、社内でデバック用に開発メンバーのみで使用するものです。
他のところでも使われているようでちょっと安心しました。

ありがとうございました。

>>417
「・・・・・・・・・・・・・・・・・・。」

419 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:51:59 ]
>>414
c99で可変長引数のマクロつかえば.


420 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 21:10:38 ]
> >>417
> 「・・・・・・・・・・・・・・・・・・。」

ガキか


421 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:06:47 ]
int *p;
は、「intへのポインタ」ってことらしいけど
「ポインタが指している変数の型がint」ってこと?

422 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:14:55 ]
うん。
int *p; は *p が int になる。



423 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:23:24 ]
サントス

噂に聞いていたがポインタは難しい…

424 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:44:18 ]
難しいと思ってるから難しいんだよ。一度分かれば何が難しかったのか理解するのが難しくなる

425 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:02:18 ]
ポインタは、変数の置いてある場所を入れておくもの。
置いてある場所が分かれば、そこにある値も操作できるはず。

426 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:06:34 ]
とにかくいろいろ読んだり組んだりしなきゃダメだな
がんばるぜ

じゃーの


427 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:28:58 ]
fopenでファイルがオープンされなかったらNULLが返ってくるけど
rはファイルがなかった場合などが挙げられる。
じゃーwだったらどういうときにそうなるの?

428 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:31:34 ]
>>427
存在しないディレクトリだとか。

429 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:31:41 ]
書き込みロックされてる場合とか

430 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:32:17 ]
ディレクトリを fopen しようとした時とか

431 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:57:35 ]
ファイルの作成をOSに拒否されたときとか

432 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:14:17 ]
ファイルの開き過ぎとか



433 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:18:56 ]
How many files(0-15)?

434 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:58:56 ]
ファイルを書き込むのに十分な空き容量がないとか
書き込めない場所への書き込みをしようとしたとか

435 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:30:36 ]
ディレクトリに書き込み権限がないとか。

って、切りがないよw

436 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:42:56 ]
入れる穴がないからといって後ろの(ry

437 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:31:35 ]
アッーー!

438 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:17:12 ]
なるほど。勉強になった。
fopen・fcloseをちゃんとしてれば、その一連は何度もループできるの?
それとも上限回数とかあったりするの?

439 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:55:08 ]
容量は有限なんだから、書き込みで新しいファイルを作っていけばいつかは上限に達する。

440 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:02:14 ]
しかし、既にあるファイルを開いて閉じてなら、永遠に繰り返していい。

441 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:45:00 ]
できました〜。ありがとうございます。

442 名前:デフォルトの名無しさん [2007/08/05(日) 18:21:27 ]
無償リンクソフトは無いのでしょうか?
もし無いのであれば有名なリンクソフトを教えて頂けないでしょうか?



443 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:23:35 ]
リンクソフトって何のことよ?
リンカーのことなら、GNU ld か?
目的を書いた方がいいと思うよ

444 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:24:14 ]
コンパイラ入れたら大抵リンカも入ってるだろ

445 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:01:14 ]
質問ですが
「C言語のプログラムをアセンブリ・コードに変換せよ」
という課題が出されたのですが、変換するツールのようなものはありますか?

446 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:03:45 ]
あります。

447 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:04:46 ]
コンパイラで出来たような気がする

448 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 21:05:32 ]
コンパイラがやってくれる
gcc なら -S オプションつけてコンパイルしてみ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<116KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef