- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
- C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 130代目 pc12.2ch.net/test/read.cgi/tech/1250204272/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 53 pc12.2ch.net/test/read.cgi/tech/1253110182/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 47 名前:デフォルトの名無しさん [2009/10/07(水) 19:32:07 ]
- >>15 >>17-28
レス どうも 日本語に対しては良く言われますw 日本人なのですが…
- 48 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:37:25 ]
- そんなやつたくさんいるからどうでもいいけど、文字だけでやりとりしたかったら、訓練してよん
- 49 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:43:18 ]
- これからやとうと思う人は普通本買う。
そして、ここは入門篇と書いてある。 本があるのに、こういうところで聞くということは、 本が悪い、理解できる能力がない、2chが好き…、検索しない などの理由だろうから、まともな人が来ないのは当然。
- 50 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:03:25 ]
- やっとうううううう!!!!
- 51 名前:デフォルトの名無しさん [2009/10/07(水) 20:03:57 ]
- >>49
以外に失礼ですね…
- 52 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:14:19 ]
- でもその通りだろ
- 53 名前:デフォルトの名無しさん [2009/10/07(水) 20:20:15 ]
- >>52
ひとつだけ plus 思考な物が在りますが? 自分に嘘をつけない type ですかw
- 54 名前:デフォルトの名無しさん [2009/10/07(水) 20:35:21 ]
- >>53 plus
因みに 私は違いますが…
- 55 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:36:18 ]
- 雇う
- 56 名前:デフォルトの名無しさん [2009/10/07(水) 21:06:17 ]
- >>47 plus
また お願いします
- 57 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 07:44:06 ]
- 最近この板にわいた日本人じゃない頭のおかしなヤツだな。
- 58 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 09:55:51 ]
- 日本人なら語尾はゴザルまたはアリンスのはず
- 59 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:10:05 ]
- きさま、日本人じゃないな!?
- 60 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:12:55 ]
- >>49
・本を買えないほど貧乏 ・プログラミング如きに1円たりとも使いたくない ・実はそれほどやる気がない
- 61 名前:デフォルトの名無しさん [2009/10/08(木) 10:20:00 ]
- 俺も書籍で学習するのが好きだけど
サーバ構築して遊ぼうと思っているから、しばらくは我慢。 貧乏学生でしゅ^^;
- 62 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:22:40 ]
- Cの入門書なんて2〜3000円で買えるだろ
- 63 名前:デフォルトの名無しさん [2009/10/08(木) 10:26:05 ]
- というか、技術書って無駄に高いの多くないか?
いや普通か。
- 64 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:26:43 ]
- "入門"ってどこら辺のレベルなんだろ
コンパイラの入手方法を知らない、辺り? ソースコードを書いてコンパイルすれば実行できることは知っている、辺り?
- 65 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:29:23 ]
- コンパイル環境がないのは入門以前だろw
- 66 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:34:15 ]
- for,while辺り
- 67 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:42:29 ]
- ifは結構理解しやすいじゃん?
やっぱループ教えるには先にifとgoto教える方が理解しやすいんじゃねのかな?
- 68 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:59:18 ]
- 俺的にはとりあえず
標準仕様のうち「簡単なもの」を一通り 使えるぐらいまでが入門じゃないかと。
- 69 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:00:04 ]
- >>67
どうせgotoは使うなって教えるんだから 最初からif, for, whileでいいだろ。 その後do-whileとgotoを教えて、gotoは極力避けろと教えればいい。
- 70 名前:デフォルトの名無しさん [2009/10/08(木) 11:35:50 ]
- sys/time.hが私のパソコンの中に入っていないのですが、
どうやったら手に入れることができるでしょうか?
- 71 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:37:21 ]
- まずLinuxを入れます
- 72 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:32:21 ]
- それはOS依存の部分だからなあ
Windowsで実行するにはCygwinを使えばいいんじゃね?
- 73 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:38:28 ]
- >>70
Linuxなりのソースから拾ってきてもいいし、Webで検索しても見つかると思う。 寧ろそんなことよりも、何故それが必要だと思ったのかを説明した方がゴールに辿り着けると思うぞ。
- 74 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:22:30 ]
- コンパイラBCC使っています。
char c='5'; printf("%x--%x",&c,*(int *)&c); とすると、結果が 12ff8b--12ffb835 となりました。 アドレスはいいとして、2個目がどうして12ffb835になるのか分かりません なんかアドレスの8bが逆になったのがくっついてるし・・・ やりたいのは、cの値をint*にキャストして表示したいということです
- 75 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:32:18 ]
- > やりたいのは、cの値をint*にキャストして表示したいということです
(int *)c こういうこと? *(int *)&c は cのポインタを int のポインタとして、指している場所に書かれている int 値
- 76 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:34:18 ]
- ・「cの値」は整数なので、ポインタにキャストすることはできない。
・cのポインタ、つまり&cをint *にキャストすることはできなくはないが、そのポイント先が安全と言う保証がないので未定義動作する。 ・その結果、2個目の%xで出力された16進数の下位2桁はどうやらたまたま'5'のアスキーコードのようだ。
- 77 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:38:55 ]
- >>74
12ffb8はスタックに残ったゴミで意味のあるのは35(='5')だけだ
- 78 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:41:05 ]
- >>76
>そのポイント先が安全と言う保証がないので未定義動作する。 キャストしただけなら問題ないが、キャストした瞬間に未定義動作ということだな。 >74の場合は落ちないようだが、環境によってはセグメンテーションフォルトで落ちるだろうし。
- 79 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:43:54 ]
- cのアドレスを受け取って、それをint*にキャスト
その後に、そのアドレスを基にして実際の値を取得したいということでした。 >>75-78 未定義動作なんですね 詳しい解説ありがとうございました。
- 80 名前:デフォルトの名無しさん [2009/10/08(木) 18:10:35 ]
- > ・「cの値」は整数なので、ポインタにキャストすることはできない。
アホ
- 81 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:40:00 ]
- そりゃまぁ、厳密にはキャストできないわけじゃないだろうけど、初心者がやるようなことじゃないよな。
- 82 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:06:40 ]
- 学校の課題を家でやるときテキストエディタで書いてBorlandさんにコンパイルさせてるんだけど
お勧めのエディタってある? スレ違いなら該当スレ頼む
- 83 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:18:08 ]
- そういえば前スレでlinuxの自動インデントのエディタを聞いた者だけど
普通にgeditの設定で出来た
- 84 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:38:54 ]
- >>82
秀丸エディタ。 初心者ならこれがぴったりだと思う。
- 85 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:40:41 ]
- >>82
BorlandならCpadが簡単操作でいいんじゃね?
- 86 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:53:19 ]
- >>84-85thx
とりあえずどちらもダウンロードしてきてしばらく使ってみる
- 87 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:09:16 ]
- 関数外で動的確保した領域のサイズを、ポインタを引数でもらうだけで知ることはできますか?
int func(int *pi) { int size; ... return size; } int main(void) { int *buf = malloc(16); func(buf); return 0; }
- 88 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:13:11 ]
- >>87
普通は無理ですが コンパイラによっては専用の命令を持っていることもあります
- 89 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:20:15 ]
- >87
int func(int *pi) { size_t size; size = *((size_t *)pi-1); ... %nbsp;return size; } int main(void) { int *buf = malloc(16+sizeof(size_t)); *(size_t *)buf = 16; buf = (size_t *)buf + 1; func(buf); free((size_t *)buf - 1); } あくまで局所的にやらないこともなかったりする 構造体使う方が読みやすくなると思うけど struct { size_t size; int *buf; } foo; まぁ、どう考えても自分でメモリ管理ライブラリ作って使ったほうがいいと思う、今後のためにも
- 90 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:23:34 ]
- >>84
sakuraじゃなくてか
- 91 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:23:41 ]
- >>86
秀丸は、金払ってまで使う意義はないだろ。 フリーのやつつかえ。
- 92 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:54:03 ]
- >>86
きときとのcpad最強 バグあるけどな
- 93 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:24:10 ]
- >バグあるけどな
kwsk よく使ってるんだが
- 94 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:00:23 ]
- エディタへの瑣末な不満は尽きない。TeraPadとかも
- 95 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:03:46 ]
- 自分で不満の無いエディタを作ったらいいのに。
- 96 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:07:56 ]
- vim
- 97 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:29:58 ]
- BZ
- 98 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:31:22 ]
- まあ、エクセルさえあれば何でもできるけどな。
- 99 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:13:57 ]
- >>98
早く寝なさい。明日学校に遅刻するぞ
- 100 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:27:17 ]
- 統計と学習を同義とするなら、エクセルで人工知能も作れるしな
- 101 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 03:23:48 ]
- 表計算から年賀状作成まで。
万能ツールだよな。エクセル。
- 102 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 03:34:08 ]
- よくきたなもまえら、でもここは「C言語なら俺に聞け(入門篇) Part 54」だ
エディタの話がしたいのなら別のところでやってくれ
- 103 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 05:47:11 ]
- >>93
たまにメモリの開放を忘れる程度 特に支障はない なんてったってうちの会社の標準環境だしなwww
- 104 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:10:42 ]
- よくC言語の解説で「動作を保証しない」とか「非常に危険です」とか
説明があるけど最悪何が起こるの? パソコンがフリーズするくらいなら立ち上げなおせば元に戻るよね
- 105 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:21:03 ]
- 最悪も未定義です
- 106 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:23:07 ]
- >>104
vista以降はOS側で最悪の動作(I/O操作、定義外のディスクリプタテーブルのメモリ操作)はブロックする。
- 107 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:42:47 ]
- どうして誰もemacsenを薦めないのか
- 108 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:04:36 ]
- emacsは大変そうだもん
blog.halon.org.uk/2006/08/04#editor-learning-curves
- 109 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:35:10 ]
- >>108
そんなあなたにxyzzyをお勧めしておきます。 が、エディタの話はエディタスレでどうぞ。
- 110 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:42:17 ]
- >>106
何が最悪かなんて人による。 実行権限次第でファイルシステムの消去くらいできるが せっかく集めたエロ動画が消えたら最悪だろう。
- 111 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:46:13 ]
- 画像は3重にバックアップとってるから消えても大して痛くないよ
- 112 名前:106 mailto:sage [2009/10/09(金) 13:03:48 ]
- 予期しないアドレスを参照したり書き込んだりするだけでハードディスクの
エロ画像が消えたりする可能性があるの?だったら確かに非常に危険だな
- 113 名前:104 mailto:sage [2009/10/09(金) 13:08:46 ]
- >>112
間違えた俺は>>104です。
- 114 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 13:46:27 ]
- バッファオーバーランとかを突いて管理者権限を乗っ取るとかいう話はよく聞くが
実際に目にしたことはない もし乗っ取られたら、画像を消すくらいは簡単だろうと思う
- 115 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:02:14 ]
- 画像を消去するために乗っ取るわけじゃないし
- 116 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:14:18 ]
- ファイルの内容をno回表示させるプログラムのはずなんですが
1回しか表示されません何故でしょうか? codepad.org/ZdKw0YmT
- 117 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:17:16 ]
- >>116
ファイルを先頭から終端まで読んでしまっているので、そのままではそれ以上読むものがないという状態。 二回目以降の読み込みに先立って、ファイルの先頭から読めるようにファイルポインタを移動する必要がある。 その目的には、rewind()を使えばいい。
- 118 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:19:39 ]
- >>117
すばやい回答ありがとうございます
- 119 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:22:38 ]
- ・scanf()の使い方が危険。
せめて、scanf("%63s", fname)としよう。 ・if文中での代入は避けた方が読み易い(但し異論もあり)。 変数の寿命の点からも、file = fopen(); if (file == NULL) {}とした方がいいと思うが。 ・エラーメッセージは標準エラー出力を使おう。 ・Cのループは0オリジンがお約束。 間違いじゃないけれど、for (cnt = 0; cnt < no; ++cnt) {}とした方が多くの人が見慣れている。 ・変数の局在化のためにも、変数宣言を関数の先頭に集中させるのはやめよう。 例えば、int chはforの内側で宣言すれば充分。
- 120 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:46 ]
- >>119
詳しくありがとうございます。 サイトぐるぐる回るのと本屋立ち読みやってたので知識があいまいなんです 今度ちゃんと本買います
- 121 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:44:17 ]
- わざわざBASICとの違いを出すために不完全な言語仕様を作るのもおかしいよな。
- 122 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:22:31 ]
- >>119
for の内側で宣言するのはやめておいたほうがいいと思うよ C言語だと
- 123 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:24:32 ]
- >>122
なんで?
- 124 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:24:46 ]
- でたらめ
- 125 名前:デフォルトの名無しさん [2009/10/09(金) 17:25:37 ]
- 逝ってよし
- 126 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:32:27 ]
- ループの中で宣言って、ループが終わるたびに解放してまた確保してるイメージなんだけど、
実際にはどうなの?
- 127 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:35:30 ]
- >>126
何もしない。
- 128 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:36:03 ]
- 実際にはそんな無駄なことはしない
確保したまま回る
- 129 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:41:31 ]
- >>126
C++ならコンストラクタ・デストラクタが動くけど、Cなら何も起こらない。
- 130 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:56:47 ]
- ありがとう
これからは躊躇無くループの中で宣言できる
- 131 名前:122 mailto:sage [2009/10/09(金) 18:06:44 ]
- for(int i=0;i<10;i++) // C99 から OK
C言語ならこの書き方を勧めるなよ って事なんだが… C99 が一般的になったのか?
- 132 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:11:39 ]
- forの内側と言うのは、普通はfor (ここ)のことではなくfor () {ここ}のことだと思うんだ。
- 133 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:12:15 ]
- ( * ) ここ
- 134 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:12:49 ]
- >>131
どこをエスパーしたのか知らないが、そんなことは言ってない、と、思う
- 135 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:13:03 ]
- >>131
まさかとは思うが、大昔からCでもこれができることは知らなかったとは言わないよな。 int main(int argc, char ** argv) { int i; for (i = 0; i < argc; ++argc) { int j = atoi(argv[i]); printf("%d ", j); } return 0; }
- 136 名前:122 mailto:sage [2009/10/09(金) 18:13:10 ]
- すまん、ブロックの先頭の事だったか
- 137 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:14:01 ]
- と、思う( * ) ここ
- 138 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:15:59 ]
- プログラミングの上級者〜プロはprintf、scanf関数を使わないと聞きましたが、
じゃあ標準入出力はどんな関数を使ってるんでしょうか?
- 139 名前:デフォルトの名無しさん [2009/10/09(金) 18:16:04 ]
- >>137
すみません、入れても、、いいですか?
- 140 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:16:24 ]
- ( * ) ここ
- 141 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:19:25 ]
- >>138
いいえ、前者なら愛用しています。 入力には大抵fgets()、出力には大抵fprintf()を使っていますが、後者は前述の通りprintf()も使います。 また、バイナリデータを扱うケースではfgetc(), fputc()も使います。
- 142 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:21:28 ]
- fgets( * ) ここ
- 143 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:23:32 ]
-
,. '" _,,. -…; ヽ |タ l l.|: : ::::::: (i'"((´ __ 〈 } | | j: :::/: |__ r=_ニニ`ヽfハ } | | |: /: : : ヾ|! ┴’ }|トi } | j | !: : :/ |! ,,_ {' } | l |:/ :::: 「´r__ァ ./ 彡ハ、 | !| : : : : : ヽ ‐' / "'ヽ | |: : /:: ヽ__,.. ' / ヽ. | |/::::_;. /⌒`  ̄ ` ヽ\_ | |:ー'´: : / i ヽ \ | |: : : : : :
- 144 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:31:27 ]
- >>139よ。お前みたいな奴をみると、あの日のことを思い出すよ。
2001年8月25日。2ちゃんが本格的に閉鎖になりかけた日だよ。 転送量が多すぎて、費用が月700万もかかってるって発表されて、「数日中に閉鎖」って予告されてさ、 その日のうちにあっちこっちの板が封鎖されてた日だよ。 あのときのUNIX板の住人、カッコよかったんだぜ。「総力を結集」ってのはまさにああいう状態だよ。 転送量を1/3に削減しないと閉鎖、ってもんだから、新しいプログラム組んでさ、 そしたらほんの何時間かで完成したんだよ。それが聞いてくれよ、目標は1/3だったのに 1/16まで圧縮に成功しやがったんだよ。職人技なんてもんじゃねえよ、神技だよ。 でもよ、そうやって頑張る人がいた一方で、「ボクの肛門も閉鎖されそうです」とか駄スレ立ててたバカも いたわけだよ。ちょうど、今のお前みたいにな。 だからよ、俺たちは総力を結集して、お前のバカ度を1/16に圧縮しようと思うよ。 ま、圧縮後でもお前のバカ度はこの世に生かしておくことのできないレベルだけどな。 要するに俺らの力を結集してもお前を助けることができないってことだ。 わかったら、まわりに迷惑をかけないようにひっそりと死んでくれよな
- 145 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:32:41 ]
- >>144( * )ここ
- 146 名前:デフォルトの名無しさん [2009/10/09(金) 18:37:15 ]
- whileでどちらかが真なら〜ってどうやってかくの
- 147 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:45:56 ]
- while (x == 1 || x == 2) {
|

|