1 名前:デフォルトの名無しさん [2009/10/29(木) 21:10:18 BE:227211146-DIA(352353)] C言語の*入門者*向け解説スレッドです。 初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 131代目 pc12.2ch.net/test/read.cgi/tech/1255709298/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 54 pc12.2ch.net/test/read.cgi/tech/1254829314/ 過去スレ 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
2 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:25:05 ] ぬるぽ
3 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:51:20 ] NULL pointer exeption
4 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 22:41:25 ] C++がスレ違いというのは言い過ぎ
5 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:04:44 ] いいえスレ違いです
6 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:05:22 ] 気に入らないならC/C++室スレにでも行ってください
7 名前:>1乙 mailto:sage [2009/10/29(木) 23:26:00 ] C言語の*入門者*向け解説スレッドです。 初心者、初級者の方は他の質問スレのほうが良いかもしれません。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること、サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 【初心者歓迎】C/C++室 Ver.69【環境依存OK】pc12.2ch.net/test/read.cgi/tech/1256022655/ ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 131代目 pc12.2ch.net/test/read.cgi/tech/1255709298/ [ 前スレ ] C言語なら俺に聞け(入門篇) Part 54 pc12.2ch.net/test/read.cgi/tech/1254829314/ [ 過去スレ ] 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 [ 関連スレ ] 【初心者お断り】ガチ規格準拠C専用スレ Part134 pc12.2ch.net/test/read.cgi/tech/1246115922/ C/C++小心者スレッドPart1 pc12.2ch.net/test/read.cgi/tech/1186262298/ [ 雑談スレは雑談スレで ] malloc pc12.2ch.net/test/read.cgi/tech/1228462009/ break文の是非について pc12.2ch.net/test/read.cgi/tech/1245658400/ ポインタ死ねよ。 pc12.2ch.net/test/read.cgi/tech/1171172537/ Cでプログラム言語は完成した pc12.2ch.net/test/read.cgi/tech/1218012085/ C言語を始めるのに良いサイトってありますか? pc12.2ch.net/test/read.cgi/tech/1169824084/ C/C++ Coding Style Thread pc12.2ch.net/test/read.cgi/tech/1096687703/ C言語は関数ができなくても、理解可能か? pc12.2ch.net/test/read.cgi/tech/1090089115/ cとc++どっちがいいの? pc12.2ch.net/test/read.cgi/tech/1245506307/ Vim vs Emacs Part2 pc12.2ch.net/test/read.cgi/tech/1200654758/
8 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:45:35 ] テンプレ追加キボンヌ ↓ ここではC++言語は別言語と考えますので、スレ違いになります。 ただしC++言語のコード(拡張子=.cpp)をリネームしてC言語の コードとしてコンパイルできる場合はC言語のコードとみなします。
9 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:19:07 ] .cpp .C .cc
10 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 01:09:53 ] Linuxで作成した拡張子.cのファイルをウィンドウズで開くと 文字化けして見れないんですがウィンドウズ上で見る方法ないですか?
11 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 01:12:32 ] >>10 ブラウザにドロップしてみる
12 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 01:18:52 ] >>11 できました!こんな簡単な方法があったとは・・・
13 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 01:20:08 ] 偽の条件式ってのは整数の0と同等に扱っていいんでしょうか? それと、真の場合は1とは限らないんでしょうか int x = ( 1+2 == 2 ); これはint x = 0と同じでいいのか、 int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください
14 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 01:21:28 ] >int x = ( 1+2 == 2 ); これはint x = 0と同じでいいのか、 いい >int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください なる
15 名前:13 mailto:sage [2009/10/30(金) 01:25:30 ] どうもありがとうございました だとすると、今まで簡単に書ける式をわざわざif文とか必要ない変数とか宣言して書いてました
16 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:53:57 ] 自信がない場合は条件演算子を使うのも一つの手です。 曰く、 int x = (1 + 2 == 2) ? 1 : 0; int y = (1 + 2 == 3) ? 1 : 0; 尤も、boolean型を作ってしまう手もありますが。 そもそもc99では標準で使えることですし。 stdbool.hが見つからないならこんな感じで作れます。 typedef enum {false, true} bool; bool x = 1 + 2 == 2; bool y = 1 + 2 == 3;
17 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 12:18:21 ] >>16 下のほうはものすごく気持ち悪い
18 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 13:00:11 ] そもそもそんなの使う場面が無い。
19 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:21:24 ] double **dSData = NULL; dSData = new double*[100]; for(int i=0; i<100; i++){ dSData[i] = new double[100]; } という感じで動的な二次元配列を作ったのですが、 sizeof(dSmokeData[0]); とやるのと double dTest[100]; sizeof(dTest); とやるのとでは、sizeofの結果が違うのですが、なぜでしょうか?
20 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:23:41 ] 括弧つけんなボケ
21 名前:19 mailto:sage [2009/10/30(金) 21:27:03 ] 訂正 sizeof(dSmokeData[0]); ↓ sizeof(dSData[0]);
22 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:31:25 ] >>19 dSData の型をみるよろし
23 名前:19 mailto:sage [2009/10/30(金) 21:36:18 ] >>22 確かに型は違っています。 dSDataを使って double dTest[100]; sizeof(dTest); とした状態と同じ結果を表すにはどうしたらよいでしょうか?
24 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:39:29 ] >>23 double (*dSData)[100] = NULL;
25 名前:19 mailto:sage [2009/10/30(金) 21:43:34 ] >>24 double **dSData = NULL; ではできないんでしょうか? dSDataはグローバル変数で、要素の数はソースの途中で決まるため、宣言時には指定できないのです。。
26 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:48:19 ] >>25 new とか使うってことは C++ でしょ? STL の vector 使えばいいよ
27 名前:19 mailto:sage [2009/10/30(金) 21:57:04 ] >>26 vector<int> v(100); sizeof(v); double dTest[100]; sizeof(dTest); sizeof(v);とsizeof(dTest);の結果がやはり違います。
28 名前:19 mailto:sage [2009/10/30(金) 21:58:28 ] 訂正 vector<int> v(100); ↓ vector<double> v(100);
29 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:59:54 ] 括弧つけるなアホ
30 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:01:57 ] int i; i = sizeof (int); i = sizeof i; だっけか?
31 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:03:51 ] >>27 なんで sizeof に拘るのさ?
32 名前:19 mailto:sage [2009/10/30(金) 22:06:10 ] >>31 memcpyを使っているので、、、
33 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:12:35 ] >>32 .size() で大きさは分かる が、古いコンパイラだと vector の中身が連続領域じゃない可能性もある
34 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:16:09 ] え?ベクターって実装上連続であること保障されてないの?
35 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:18:31 ] プゲラ
36 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:20:59 ] >>34 古い仕様書には明記されていなかったから 実装がどうなっているかはコンパイラ次第とかなんとか
37 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:36:28 ] C++厨は巣に帰れ
38 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 22:51:59 ] 自己参照構造体使って自作するのがC使い
39 名前:19 mailto:sage [2009/10/30(金) 23:05:41 ] double dTest1[100][100]; sizeof(dTest1[0]); と double dTest2[100]; sizeof(dTest2); とやっても sizeofの結果が異なります。。
40 名前:19 mailto:sage [2009/10/30(金) 23:30:45 ] ↓ 誤爆です。間違ってました。合ってます。
41 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 03:42:45 ] それは誤爆といわない
42 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 07:06:03 ] 要素数はわかってるんだから変数に保存しておけばいいだけだろ sizeofにこだわる必要はない
43 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 07:10:58 ] sizeofの値はコンパイル時に決まってないとだめだから実行時にしか決まらない値を得られるはずがない 関数じゃないんだからね
44 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 11:32:35 ] strcpy(a, (char)crypt("hogehoge", "EV")); これって何かおかしい?
45 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 11:36:43 ] なんでcharにキャストしてるの?
46 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 11:47:54 ] >>45 キャストされてないってコンパイラに怒られたから test.c:11: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast
47 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 12:14:27 ] >>46 crypt.hをインクルードしてないだろ。
48 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 12:23:03 ] >>47 #define _XOPEN_SOURCE #include <stdio.h> #include <string.h> #include <unistd.h> int main() { char a[100]; strcpy(a, (char)crypt("hogehoge", "EV")); printf("%s", a); return 0; } これで問題ないはずなんだけど一応全文を
49 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 13:20:14 ] キャストは(const char *)でしょ
50 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 13:53:01 ] >>49 ありがとうございます とりあえず生成できるようになったのはいいけど結果が2chと食い違ってて泣いた でもage.s22.xrea.com/talk2ch/trip_new.txt の例どうりにやったらあってたんだよなぁ
51 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 14:01:18 ] tripkeyの文字コードが違うんじゃないの?
52 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 14:12:58 ] abcdではあってなくてkamiではあってるってのもどうなのかなぁ・・・
53 名前: ◆jG/Re6aTC. mailto:sage [2009/10/31(土) 14:22:50 ] test
54 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 14:52:17 ] >>46 見てなんでcharにキャストしたんだろうな
55 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 15:07:23 ] 馬○だから
56 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 15:10:42 ] 泣いて馬○を斬る。
57 名前:デフォルトの名無しさん [2009/11/01(日) 01:33:45 ] eclipseみたいにコードの誤りが表示されて、'{'に対応する'}'が 自動で生成されるシンプルなテキストエディタって何かないですか? IDEじゃなくて、コマンドプロンプトから実行できる、あと軽いやつで なにかおすすめはないですか?自分よくコードを打ち間違えるんすよ。
58 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 01:49:34 ] 間違えるな
59 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 01:55:57 ] emacs
60 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 02:11:05 ] IDE だってコマンドプロンプトから実行できるだろ。
61 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 02:46:48 ] vim
62 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 03:21:28 ] vim以外使ってる奴は糞。特に日本人しか使ってない秀丸とかいう糞エディタ使ってる奴はking of 糞。
63 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 03:46:14 ] vim(笑)
64 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 03:54:47 ] さすがにVi(中身はViMだろう)で開発はきつい makeしたときのコンパイルエラーをちょろっと直す程度ならいいんだけどね ctagsですね、わかります
65 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 08:15:22 ] gedit最強
66 名前:デフォルトの名無しさん [2009/11/01(日) 09:12:45 ] 個人的な好き嫌いだけで糞とか決めつけてる奴って協調性低そう 客先から縛りをつけられたことがなくコードは常に1人で書いてるんだろうな
67 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 09:36:58 ] >>65 なかなか高機能だよな。
68 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:18:33 ] EDLIN 使えボケ
69 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:22:57 ] Cならvimが最強。
70 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:27:18 ] vimを使ってない奴は人生の貴重な時間を無駄に浪費している
71 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:28:24 ] 1バイト言語圏の人ならな。
72 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:28:41 ] Emacs じゃダメなの?
73 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:29:16 ] うわあ、かなり頭の悪いレスが続いてるなあ いくら道具にこだわっても、そんな脳ミソじゃその人生自体無駄だろうね
74 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:51:32 ] あらゆるエディタを使い倒してきたエディタ神の俺だが、攻守最強形態vimだと悟りを得た。異論は認めないからそのつもりで。
75 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:07:04 ] これだから信者は。頭のネジが数えきれないくい抜けてるんだもん こんなキチガイが回答者の質問スレとか始まる前から終わってるわ
76 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:16:43 ] 自分の頭の悪さを棚にあげて、人をキチガイとか煽ってるやつも消えてほしい。
77 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:18:44 ] そして、誰もいなくなった……
78 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:21:31 ] 棚上げって、俺の頭の良し悪しは今問題じゃないし。信者がうざいってだけ。 俺はどのエディタ以外は屑とか思ってないから。
79 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:34:05 ] 日本語でおk。
80 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:37:54 ] 読解力0なら2ちゃん見るなよ
81 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:42:11 ] emacsはctrl-N, ctrl-P, ctrl-F, ctrl-Bの時点で糞。カスタマイズ前提の思想は受け入れられない。矢印キー移動のエディタも糞。ホームポジションから矢印キーに移動した時点で負け組みの証明をしている。
82 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:44:38 ] >>81 お前がそう思うんならそうなんだろう、お前ん中ではな
83 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 15:16:35 ] 統合環境でそれなりに満足してるおいらにはわかんねぇべぇ
84 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 15:31:25 ] 統合環境ってemacsのことだよね
85 名前:デフォルトの名無しさん [2009/11/01(日) 16:21:18 ] テキストエディタ使ってコマンドプロンプトからプログラム実行しようと 思ったけど、やっぱり果てしなく面倒くさい。 テキストエディタってどれも安っぽくて、萎えるし。 シンプルで高級感があるソフトないんですかー><1日で挫折しましたよー。 誰かIDEのおすすめを教えてください。ちなみにC言語を勉強してます。 無駄な機能を省いた使いやすいやつないですか?
86 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:24:44 ] IDEとテキストエディタは別物なんだけどな。そして大抵IDE付属のエディタは糞。
87 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:34:11 ] >>85 Turbo C++ 1.01
88 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:37:02 ] >>85 VisualStudio2008ExpressEdition
89 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:45:37 ] すいません他のスレにも質問したのですがブックマークしわすれてて、探したんですけど見つからないのでこのスレで質問させていただきます。 「14歳からはじめるC++」という本で勉強しているんですが、エラーでコンパイルできなくてこまっています。 BCC DeveloperでDXライブラリをインクルードする設定をしました。 #include"DXLib.h" int WINAPI WhnMain(HINSTANCE hi, HHNSTANCE hp, LPSTR lpC, int nC) { ChangeWindowMode(TRUE); if (DXLib_lnit() == -1)return(-1); WaitKey(); DXLib_End(); return(0); } 以上のソースをコンパイルすると エラー E2268 〜 6:未定議の関数'DXLIb_lnit' 〜 エラー E2268 〜 8:未定議の関数'DXLIb_End' 〜 とエラーになります。かなりググッたんですがまったくわからず... どなたかアドバイスいただけませんか。 よろしくお願いします。
90 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:54:21 ] >>85 シンプルで高級感があるソフトを作れるようになるまでがんばれ! いい目標ができたじゃないか
91 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:55:22 ] >>89 あいとえるの区別をつけよう
92 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:59:44 ] 本当にエラーがその二つだけなら、 大文字と小文字間違えてるんだろ。 そも、誤字がひどいから明言は出来ない。
93 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:23:48 ] >>89 ソースとコンパイラの出力を全部そのままコピペして
94 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:31:15 ] >>89 コピペで聞きなおせつったの俺だ。どこだっけか。 ttp://homepage2.nifty.com/natupaji/DxLib/dxfunc.html ここみると、DXLib_Init → DxLib_Init だなXとxの違い。
95 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:32:53 ] って l と I もか、、、
96 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:33:54 ] i と I もだな
97 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:43:10 ] >>89 みなさんのおかげで解決できました。誤字でエラーだったんですね。xも小文字で。 丁重にみなさん教えていただき本当に本当にありがとうございました。 助かりました。
98 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 20:51:02 ] じゃんけんプログラムの次て、何作ったらいいんでしょうか? 初めてなので、なんていうか度合いがわかりません。簡単な計算プログラムしか作れない。。
99 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 20:58:24 ] >>98 ヒットアンドブロー(マスターマインド)とか呼ばれる数当てゲーム
100 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:25:29 ] 頭こんがらがってきたのですが 例えば int i = 8;で char型のポインタにint型のiを代入したいんですが 上手くいきません どうすればいいでしょうか?
101 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:29:16 ] やりたいことは int i = 8; char* p = (char*)i; でいいの?
102 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:33:11 ] なぜそのようなことをしたいと思ったのか不思議だ
103 名前:デフォルトの名無しさん [2009/11/01(日) 21:42:54 ] struct{ unsigned char AAA[10]: unsigend shor int aa; }BB unsgined char buf[500]; こういった変数があったとして、 struct BBの全12バイト、配列buf[300]-[500]の値を2バイトずつ加算して足して行き 最終的に足したものの2の補数を計算したいとおもうのですが 引数を一つとしてうまく渡す方法はないでしょうか? struct BBを足したあと、配列[300]からまた順次足していくみたいな structBBの終わりのアドレスの次が、配列buf[300]の先頭になるとかどうすればよいのでしょうか?
104 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:48:38 ] まず日本語の勉強をすると良いよ。
105 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:52:34 ] > structBBの終わりのアドレスの次が、配列buf[300]の先頭になるとかどうすればよいのでしょうか? 多分、期待してるようなのは無理。
106 名前:100 mailto:sage [2009/11/01(日) 22:00:44 ] ありがとうございます >>101 たぶんそうなんですが、うまくいきません >>102 学校の宿題で自分なりに書いてみたんですが、うまくいきません 16行目です kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10038.txt 何か根本的なところを間違えているかもしれません 実行結果 codepad.org/0xazNy9b
107 名前:デフォルトの名無しさん [2009/11/01(日) 22:04:11 ] >>105 ではstructBBあるいは配列[300]以降のデータを書き換えると、それらのコピーが書き換えられるというのは どうすればよいのでしょうか? コピーstructBBの次が、コピーの配列[300]以降で、コピー元をかえると、自動的にコピー先も書き換えられるという
108 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:06:52 ] >106 制御文字
109 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:07:31 ] >>107 C言語の範疇では無理。
110 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:09:30 ] >>111 >>110
111 名前:110 mailto:sage [2009/11/01(日) 22:20:10 ] 間違えた >>103 >>102
112 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:35:28 ] コピー先と元を間違えてるんじゃね。 とりあえず、日本語の勉強をすると良いよ。
113 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:37:42 ] これは冗談でも煽りでも何でもない。 コードの目的を明確に言葉で表せないなら それをロジックで組むのも不可能だよ。
114 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:47:07 ] なんで引数ふたつにしたらまずいの?
115 名前:デフォルトの名無しさん [2009/11/01(日) 23:07:58 ] >>98 じゃんけんが作れたなら次は格ゲーでもどうかな? ほとんど同じ論理でグーチョキパーの数を増やしていくだけだぞ
116 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:08:45 ] >>106 こういうこと? 違ったらごめん 0x72.net/upload/src/0001.c.txt
117 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:09:16 ] >103 もしかしてこうゆうことがしたい? struct { struct{ unsigned char AAA[10]: unsigend shor int aa; }BB; unsgined char buf[500]; } wholeParam; こうやって関数の仮引数としてwholeParamを渡す。
118 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:26:13 ] struct{ unsigned char AAA[10]: unsigend shor int aa; }BB; unsgined char buf[500]; short int f(int x) { return x>=0 && x<6 ? ((short *)&BB)[x]:((short *)(buf+300))[x]; } buf[300]〜[500] だと突き抜けるから、 多分 [299]〜[499]のつもりなんだろうけど、 一応、書いてある通りに。
119 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:30:09 ] 加算の仕方が判らんよ。 数字としてなのか値としてなのか。 関数通せば整数一つから擬似的に不連続を繋げられるけど、 その後どうしたいのか不明確すぎる。
120 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:33:42 ] >>118 sizeof(struct BB)が12byteである保証は無いんで、運が悪ければハマるかもね。
121 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:34:54 ] それ以前に shor 型とやらが何バイトかなんて知らないんで。
122 名前:100 mailto:sage [2009/11/01(日) 23:41:06 ] >>108 >>116 ありがとうございます! そういうことです! 自分のレス見返したら問題文書いてなくて すいませんでした。 もう一度勉強してきます
123 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:41:39 ] #define shor short #define unsigend unsigned #define unsgined ;unsigned struct{ unsigned char AAA[10]: unsigend shor int aa; }BB unsgined char buf[500]; unsigned short int f(int x) { return x>=0 && x<5 ? ((short *)BB.AAA)[x]:x==6?(BB.aa:(short *)(buf+300))[x]; }
124 名前:デフォルトの名無しさん [2009/11/02(月) 07:44:03 ] _beginthreadexってBCCだと使えないの?
125 名前:デフォルトの名無しさん [2009/11/02(月) 08:34:00 ] >>124 BCCでも使えるよ
126 名前:デフォルトの名無しさん [2009/11/02(月) 10:04:53 ] どうやって
127 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:22:04 ] _ではじまるのはMS独自。
128 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:27:20 ] >>127 Wintelの場合、ライブラリファイルフォーマットは事実上共通 だろ?だからリンカで繋げられれば動く筈だが...ダメなのか?
129 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 12:20:53 ] つーか、そもそも_beginthreadex()がWinAPIのそれかどうか疑いもしない辺りが間抜け。
130 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 13:28:09 ] _ で始まってたり、すべて小文字だったりする関数名からして 明らかに API ではなく CRT なわけだが、それが何の関係が?
131 名前:質問! [2009/11/02(月) 13:30:23 ] CRTって何ですか?
132 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 13:41:12 ] CathodRayTube:陰極管
133 名前:デフォルトの名無しさん [2009/11/02(月) 13:54:31 ] Cランタイム(ライブラリ) C実行時ライブラリ
134 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 14:03:14 ] >>128 条件付でYES。 VCのランタイムのソース見ればわかる。 _beginthread(ex) は、 VCで提供している標準関数をスレッドセーフにするために、 TLSを作ったり 浮動小数点関連や 構造化例外(API)→C++例外配送機構 の初期化を行った後 CreateThread を呼び出してる。 (callback 関数も内部のものを利用) thread が死んだ時、上記の後始末もやってる。 つまり、標準関数周辺のランタイムも VC のを使うなら動くわけだが… なお、BCC は同じ名前で似たような機能の _beginthread(ex) を自前で用意しているんじゃなかったかな
135 名前:デフォルトの名無しさん [2009/11/02(月) 15:29:56 ] プログラム実習の授業に ついていけないんですが、素人にお勧めの入門書はないですか? 大学一年です
136 名前:デフォルトの名無しさん [2009/11/02(月) 15:34:41 ] 新版 明解C言語 入門編
137 名前:デフォルトの名無しさん [2009/11/02(月) 15:55:20 ] 関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになるって聞いたんだけど 本当なの?
138 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:06:36 ] >>137 うそだよ ・・・って一気に切り捨てるのもなんだから問おう。 > 関数内で定義した変数 ってなんだ?
139 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:14:27 ] ローカル自動変数のことだろ。 スタック上に確保される実装が多いから、 ネスト深くしすぎるとスタック溢れするからってことだろ。 まあ、普通に使う分には気にしなくていいよ。 ただし、ローカル自動変数にあまり巨大な領域を使うなってことは言える。 void func(){ int a[1000][1000][1000]; // こういうのは止めろってこと。 return; }
140 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:17:23 ] >>139 ヒープでもありえねーよw
141 名前:138 mailto:sage [2009/11/02(月) 16:17:39 ] あー、そういいたいわけか。 まあ入門編スレだしな。 >>137 しかしローカル自動変数を削除っていったい何をどうしたいんだ? そういう間違ったことを教えてきたクソに 聞くべきじゃないか?
142 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:19:10 ] 便乗質問で申し訳ございませんが、 int a[1000][1000][1000] が欲しい場合どうすればいいんでしょうか? newでヒープに確保しようにも無茶ですよね。
143 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:20:54 ] >>142 mmap 使うべし
144 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:27:27 ] >>143 UNIX系OS独自のものですか? クロスプラットフォームに使える mmapみたいなものはありませんでしょうか? C++ライブラリでもいいんで。
145 名前:デフォルトの名無しさん [2009/11/02(月) 16:36:32 ] >>135 K&R とコンパイラのマニュアル、& スペシャルボーナスで Google これでダメなら、せっかく頑張っても先はないから、他の科目で優をとるために力を回すべき ちなみに C++ の禿本は K&R の3倍くらい難しい
146 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:46:51 ] >>144 ヒープに取れない→2次記憶としてファイルを使う→ファイル操作に縛りがでるかも? で、汎用性の高いものは作りにくいんでないかな?
147 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:55:03 ] >>142 CでなくなってしまうがC++でプロキシクラスでoperator[]を オーバーロードすればディスク上に巨大な配列が取れる ただし激遅なのはもちろん
148 名前:デフォルトの名無しさん [2009/11/02(月) 16:56:28 ] >>142 32bit 空間に 1GB なら基本的に無理はない そういうオーダーでいくつも取る気なら 64bit を選択しれ
149 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:56:53 ] >>146 なるほど、確かに。 >>147 あー擬似的にクラスで実現するってことですか。
150 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:56:56 ] たった4GiB弱くらい、ヒープに確保しちゃえばいいじゃん。
151 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:58:25 ] >>148 型が int なんで… 微妙にアウト? (べき指数のベースが 1000 vs 1024 で違うけど)
152 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:58:52 ] >>149 Windows と Linux で関数名が違うから 自分でラッパー書けばいいよ
153 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:06:24 ] >>142 あとその巨大な配列の全部に要素を入れるのではなく ガラガラな使い方をするのなら、疎行列(sparse matrix)という技法がある
154 名前:142 mailto:sage [2009/11/02(月) 17:09:20 ] みなさんありがとうございます。 なんか私の知識をずっと超えたレベルになって来たようで、 勉強不足を痛感する限りです。
155 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:13:36 ] >>141 ローカルスコープでも使わせたいのかしらん void func () { int foo; /* 関数全域で使う変数 */ { int a; /* a を使うコード */ } } C++ なら コンストラクタ/デストラクタの都合があるので意味ありそうだけど(それでも PODはあやしいが…) C でローカルスコープ脱出後に戻されるという保証はないよね?
156 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:21:52 ] >>155 というか int a[1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000]; でもC/C++の仕様上は問題はないんだよね。 単に現実を見ろよって話なだけで。
157 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:25:49 ] int *************************i; とかでもいいよ コンパイルされたコードを見ると笑えてくるけど
158 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:27:36 ] >>155 賢いコンパイラなら、以下のiとjは同じ領域を使いまわすかもしレナ。 void func(int para) { { int i = para; } { int j = para; } }
159 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:32:32 ] >>158 言えてる。 とくにそれが配列だったりしたらそうするかもしれないね。
160 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:39:12 ] >>158-159 領域の使いまわしが発生しているとすると、削除には該当しないんだよねー (スコープ脱出後もメモリ上は存在している という意で) なおさら 「関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになる」 の意図が見えないな
161 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 18:00:11 ] そんな意味不明なフレーズには、本人に聞けとしか言えんだろう
162 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 18:01:39 ] 前にもそんなこと言って人の言うこと聞かなかった奴がいたな。
163 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 20:51:28 ] 陰極管だと Cathod Tube だよなぁ CRT なら陰極線管と翻訳すべきだった
164 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 21:03:19 ] エロい話かと思った
165 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 07:10:51 ] 関数内でmallocした領域はfreeしないとメモリリークする ってことでは
166 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 11:29:36 ] >>165 スタックオーバーフローにはならんのでは
167 名前:デフォルトの名無しさん [2009/11/03(火) 12:29:47 ] ランレングス符号化のプログラムです このプログラムだと最初の文字が評価されなくて困っています。 アドバイスをお願いします。 #include <stdio.h> int runlength(int length, char *str_org, char* str_enc){ int i,j = 0; char *RLE = str_enc; while(length--){ if(str_org[i] == str_org[i + 1]){ i++; j++; } else{ *str_enc++ = str_org[i]; *str_enc++ = '1' + j; i++; j = 0; } if(str_org[i] == 0) break; } str_enc = 0; return(*RLE); }
168 名前:続きです。 [2009/11/03(火) 12:30:32 ] int main(void){ char buf_r[1024] = {0}; char buf_w[1024] = {0}; int length; printf("文字列の入力\n"); scanf("%s",buf_r); runlength(1024,buf_r,buf_w); printf("[ランレングス符号化]\n%s\n",buf_w); return(0); }
169 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:37:24 ] ワロタ
170 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:37:57 ] int i = 0,j = 0; とか?
171 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:44:55 ] C言語でポインタというのがありますが、 ゲームではどういうところで使われてるんですか? 具体例を教えてください。
172 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:45:45 ] メッセージの出力とか。
173 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:47:46 ] ファイルの読み書き
174 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 12:49:09 ] スタートアップ直後 DirectXの初期化で とか
175 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 13:07:36 ] >>167 >>116 を参考にしてみて 同じ学校なのかな?
176 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 13:37:00 ] 最近は義務教育でC言語まで教えてるのか
177 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 13:47:39 ] >>167 暇だからやってみた。参考になれば 0x72.net/upload/src/0002.c.txt
178 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 16:06:44 ] 最近のコンパイラってブロックの先頭じゃなくても変数の宣言できるの?
179 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 16:10:33 ] C99なら可
180 名前:デフォルトの名無しさん [2009/11/03(火) 17:16:24 ] (int *) ↑*って何
181 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:17:05 ] asterisk だよ。
182 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:22:06 ] ポインタ型
183 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:36:07 ] (insert -> *)
184 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:48:51 ] ポインタ型ってなんだよ
185 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:58:05 ] (int *) = * を付けたら int 型
186 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 19:37:46 ] * = ア○ル
187 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 20:19:45 ] × アナル ○ アヌス 「アナル」は形容詞形。 「アナル○○○」と後ろに続く場合の活用形。 単体で名詞として使うなら「アヌス」とするべき。
188 名前:デフォルトの名無しさん [2009/11/03(火) 20:24:04 ] あーネイティブの発音知らないわけねw 英語弱者って電子土方やってても辛そう
189 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 20:28:35 ] 日本語表記においてはネイティヴの発音にいちいちあわせる必要はないだろw
190 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 21:12:34 ] >電子土方やってても辛そう 最近の2chって>>188 みたいに無意味に突っ掛かってくるヤシが多いよな。 氏ねばいいのに。
191 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 21:14:50 ] どうでもいいことで盛り上がるなよ みんなタヒねばいいのに くそが
192 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 21:15:23 ] 劣等感ゆえの攻撃性だから、哀れみをもってスルーするのがいいよ。
193 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 21:16:11 ] つ jfk.2ch.net/test/read.cgi/classical/1229764900/
194 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 21:17:35 ] >>191 仕様書ある夫さんですか?
195 名前:仕様書ある夫さん mailto:sage [2009/11/03(火) 21:23:19 ] 仕様書ある尾です
196 名前:デフォルトの名無しさん [2009/11/04(水) 14:32:31 ] int Func(void* buf) { SOCKET SOCK = (SOCKET)buf; voidポインタで渡された値をソケット型にキャストしたいんだけど これだとうまくいかない
197 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:38:19 ] ヘッダファイル読め SOCKETって構造体か何かじゃねーの?
198 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:38:41 ] SOCKET sock = ...... ; Func( (void*) sock ); 呼ぶ側はもちろんこうだよな?
199 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:39:29 ] SOCKETが何なのかわからんが、voidポインタの引数はキャスト不要じゃない?
200 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:46:16 ] ポインタ以外の何かなら必要じゃないか?w
201 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:51:26 ] 初期化に定数以外って使えるの?
202 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 15:14:08 ] 今の普通のCなら使える。
203 名前:デフォルトの名無しさん [2009/11/04(水) 15:52:19 ] >>201 C FAQでも読んどけ
204 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 15:55:48 ] >>203 C FAQのどれ?項番教えて
205 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 16:12:13 ] int f(int a){return a+1;} int main(){ int i = f(1); /* できるの? */ return 0; }
206 名前:デフォルトの名無しさん [2009/11/04(水) 16:16:25 ] >>201 少なくともGNU CとC++では使える。
207 名前:デフォルトの名無しさん [2009/11/04(水) 16:17:41 ] BCC55でも使える
208 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 16:20:19 ] 初期値だったら定数じゃないと無理だろうけど、 自動変数の初期化なんてのは所詮は普通に代入してるだけだからな。
209 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 18:43:10 ] 初期化と代入は本来違うものであってしかるべきなんですが、まあ時代もかわりましたね。
210 名前:デフォルトの名無しさん [2009/11/04(水) 18:56:02 ] >>205 できない、と思っているなら なぜそう思うのかを開陳すべき
211 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:27:24 ] ヽ('A`)ノ カイチン! ( ) ノω| __[警] ( ) ('A`) ( )Vノ ) | | | |
212 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:54:14 ] while((*p++ = *q++) != 0 ) ; このコードの意味を説明してもらえませんか? 自己解釈 1 qの値をpに代入する 2 その値が0でなければwhileループ内を実行する 3 p及びqのアドレスを1インクリメントする こういう意味ですか?
213 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:05:34 ] 1. *qの値を*pに代入する 2. p及びqのアドレスを1インクリメントする 3. 1の値が0でなければwhileループ内を実行する インクリメントは*qの値が0であってもそうでなくても行われる whileループ内の文が実行されるのはインクリメントが行われた後
214 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:14:06 ] >>213 thx
215 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:51:17 ] >>212 そういうトリッキーなコードを書いてウケたのは1980年代 なんでw 30年前は兎も角現在そういうコードを書いてもプロセッサ までその努力が全く届かないので do{ *p=*q; p++,q++ }while(*q!='¥0'); とかの演算子の優先順位を記憶していない人でも読めるコード で書くのが吉
216 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:53:53 ] >>215 うっせはげ うっせはげ うっせはげ
217 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:54:01 ] 上のコードは等価じゃなかったw for(;;){ *q=*p;p++,q++; if(*p=='¥0')break; }
218 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:56:03 ] なにそのトリッキーなコード。
219 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:02:01 ] よーし、>>218 がもっと簡単なの書くぞ〜
220 名前:デフォルトの名無しさん [2009/11/04(水) 21:02:42 ] >>215 あの程度をトリッキーという技量で論じた結果がそれ 演算子の優先順位くらい理解していないから間違えた a = 1 + 2 * 3; の優先順位くらい頼むから理解してくれ というのと五十歩百歩の域を出ない
221 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:05:12 ] >>217 も間違っているしな
222 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:15:33 ] strcpy(p,q);
223 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:21:01 ] >>212 while(*p++ = *q++); これで必要かつ充分
224 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:24:29 ] あれがトリッキーに見えるって他言語からCに入った人?
225 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:26:45 ] うちの職場じゃ見かけないねえ
226 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:29:33 ] >>221 ワロタ 本当だw
227 名前:デフォルトの名無しさん [2009/11/04(水) 21:35:02 ] 間違ってるとかワロタとかいいからちゃんと指摘してくれ いえ、お願いします
228 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:36:33 ] >>227 自分で書いたんだろう 動作テストしてみな ちゃんと動くかどうか
229 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:53:35 ] do{*p=*q;++p;++q;}while(*(p-1)); 分解するとこんな感じか 普通に>>212 のままの方がいいな
230 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:35:12 ] >>223 冥途の土産に持っていけ
231 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:53:13 ] 要するにただの stos だろ
232 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 23:24:49 ] Q . . . . . . . . . . . Q . . . . . . . . . . Q . . . . . Q . . . . Q . . . . . . . . . . . Q . . Q . . . . . . . . . Q . . . . 記念
233 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 01:03:15 ] >>232 わかる
234 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 02:52:31 ] 8Queensか
235 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 04:33:07 ] pとqがchar *型なのであればstrcpyが一番。 そうでなく、int *などなら>>223 で充分。イディオムとして成立している書き方が読めないのは単に経験不足。 それでもトリッキーだというのなら、 while(*p++ = *q++) { ; /* 空 */ } とでもしておけばいい。
236 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 05:07:39 ] ポインタを使えばアドレスを操作できるみたいだけどC言語ってアセンブリみたいに直接アドレスを指定して変えれる? アドレス12345678の値をFBにせよ みたいな。 こういうこと難しい?
237 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 05:42:28 ] >>236 簡単にできる。
238 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:18:25 ] *(char *)12345678 = 0xFB; でいいのだろうか
239 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:24:45 ] >>236 * (char *) 0x12345678 = 0xfb;
240 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:26:05 ] あぁ
241 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:45:49 ] 16進とは書いてないだろ。
242 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:50:58 ] アドレスって書いてあれば16進だと思うの普通じゃね?
243 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 11:09:29 ] プレフィックスもサフィックスもなく、[0-9] だけで構成された数字を見たら 16進ではない、と思うのが自然な飢餓する。
244 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 12:11:12 ] >>227 >>217 の糞コードじゃ0がコピーされないだろ
245 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:08:28 ] for(;;) { *q=*p; if(*p=='¥0') break; p++,q++; }
246 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:17:46 ] アドレスを10進数で表記するような文献は見たことない
247 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:14:38 ] >>245 それだと最終的なp, qの値が違う for(;;) { *q=*p; if(*p=='\0') { p++; q++; break; } p++,q++; }
248 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:55:24 ] >>246 つ情報処理技術者試験
249 名前:デフォルトの名無しさん [2009/11/05(木) 16:18:28 ] www.dotup.org/uploda/www.dotup.org332567.pdf.html この課題の『Aについて』でいきなり詰まってしまいました。 少しずつ理解しながらやりたいので、だれか協力お願いします。 なんどかこのスレで質問することになると思います。
250 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 16:27:24 ] 整数乱数ってなんですか? とか、そういう感じの具体的な質問をお願いします 協力お願いしますでは何を答えていいのかわかりませんので
251 名前:249 [2009/11/05(木) 16:33:13 ] 自己解決しました。
252 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 16:42:03 ] 自己発電しました
253 名前:249 [2009/11/05(木) 16:56:59 ] >>249 です 整数乱数とはなんですか? Aについてですが、今までは int kansuu(int x) { return x*x; } のように数式を作るような使い方しかして来ませんでした 問題文にあるように関数の中で、min,maxを定義できるんですか?
254 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:03:30 ] #include <stdlib.h> int randomNumber (int min, int max) { return rand() % (max - min + 1) + min; }
255 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:17:48 ] >>254 剰余を使うな。
256 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:18:54 ] int randomNumber(int min, int max) { return (int)(rand() / (RAND_MAX + 1.0) * (max - min + 1)) + min; }
257 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:20:40 ] >>255 今更気にする必要なし。
258 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 18:00:43 ] 2の累乗以外の乱数を出す場合は、 振り直し法を使わないと均等にはならないよ。 例えば RAND_MAX が 7 として、 それで 1〜6 の乱数を求めたら 1/8 の確率のものと 2/8 の確率のものが混ざってしまうだろ。 これは RAND_MAX を大きくしても解決しない問題だろ。
259 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 18:09:31 ] >>257 それはない。rand() の線形合同法では mod を使うのはご法度。
260 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 18:16:04 ] 別にいいよ
261 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 18:51:49 ] >>256 実数を使っても無駄だよ。 int randomNumber(int min, int max) { return rand() / (RAND_MAX / (max-min+1)) + min; } 整数でも変わらん。 どうしても均等にしたければ振り直し法を使うしかない。
262 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 18:54:31 ] 整数オーバーフローは起きないの?
263 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 19:02:14 ] >>261 奥山晴彦氏の乱数の改良でも使えばいいだろ www.vector.co.jp/soft/data/prog/se002453.html
264 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 19:09:44 ] 9桁以下の正の整数か否かを判別したいのですが if(m>0 && n>0 && m<=999999999 && n<=999999999) これでいいんでしょうか? もっとスマートになりそうな気が…
265 名前:デフォルトの名無しさん [2009/11/05(木) 19:15:07 ] m の判定と n の判定がごちゃ混ぜになっているのが「スマートではない」な
266 名前:264 mailto:sage [2009/11/05(木) 19:20:53 ] >>265 えっとつまり if(m>0 && m<=999999999 && n>0 && n<=999999999) ってことですか? 個人的に「999999999なんて入力しないんじゃなかろうか」と思ったのですが…
267 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 19:24:43 ] m と n のどっちが外れているかの判別ができないけどいいの?
268 名前:デフォルトの名無しさん [2009/11/05(木) 19:34:10 ] >>266 とりあえずはね ただし >>267 が言っているような問題がまだ残っているし 入力は屈指のこわーい所で、範囲チェックだけで済むかどうかも怪しいぞ
269 名前:264 mailto:sage [2009/11/05(木) 19:45:26 ] >>267-268 急いでソース全部打ってきました /* 9桁以下の2つの正の整数m,nを入力して、m/nの小数部分 */ /* を四捨五入して得られる整数値を出力するプログラム */ #include <stdio.h> int main(void) { int m,n,quotient; printf("\n9桁以下の正の整数を2つ入力して下さい\n"); scanf("%d%d",&m,&n); if(m>0 && n>0 && m<=999999999 && n<=999999999){ quotient = (m+n/2)/n; printf("\n%d/%dの小数部分を四捨五入して得られる整数値は、%dです。\n\n",m,n,quotient); }else{ printf("\n入力する値は9桁以下の正の整数にして下さい。\n" "プログラムを終了します。\n\n"); } return 0; } コメント内のプログラムを作成するのが課題なのですが、ループ処理はまだ習っていないので終了という形にしてみました。 mとn分けたほうがいいでしょうか?
270 名前:デフォルトの名無しさん [2009/11/05(木) 19:51:44 ] ループがまだってことは、関数もまだか 今んとこそこまでかな
271 名前:264 mailto:sage [2009/11/05(木) 19:59:39 ] >>270 そうですか ありがとうございました とりあえずif文の中を整理して提出してみます
272 名前:デフォルトの名無しさん [2009/11/05(木) 20:49:54 ] >>269 11桁とかの数入力されときどうなるんだっけ?
273 名前:デフォルトの名無しさん [2009/11/05(木) 21:18:59 ] scanf関数を用いて入力された3桁の整数に対して、 10の位および1の位を四捨五入することによって得られる2つの整数を表示するプログラムを作成せよ。 例)『425』を入力した場合、『400, 430』が画面に表示される。 宿題でこんなのが出たのですがどうしても出来ません!! どなたか教えてください!!
274 名前:デフォルトの名無しさん [2009/11/05(木) 21:19:58 ] ちなみにこんな感じでやってみたけどダメでした #include<stdio.h> #include<math.h> int main(void){ int x,a,b; scanf("%d",&x); a=(x/100)+0.5; a=((int)a)*100; b=(x/10)+0.5; b=((int)b)*10; printf("10の位を四捨五入して整数で表します.\n"); printf("結果=%d\n",a); printf("1の位を四捨五入して整数で表します.\n"); printf("結果=%d\n",b); return 0; }
275 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:25:03 ] >>274 惜しい!
276 名前:デフォルトの名無しさん [2009/11/05(木) 21:34:03 ] 自販機のLEDあるじゃないですか あれみたいに、 右から順にボタンLEDが点灯していき左端で停止 停止したら右からまたLEDが順に点灯していきスタック スタックしたら右からまたLEDが・・・ ってのをやりたいのですが、「一行で」やるにはどうすればいいのですか。 ifを使うとビットシフトでできるのですが 「一行でやれよバカ」だそうです。
277 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:38:33 ] >>276 質問の内容が意味不明だが 改行しなきゃいいんじゃないかな?
278 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:39:59 ] 1行って言われてもね……
279 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:42:06 ] >>276 日!本!語!で!お!k!
280 名前:デフォルトの名無しさん [2009/11/05(木) 21:45:36 ] #define (コントローラのLEDアドレス) Fuckintosh char LED = 0x01; Fuckintosh = LED << 1; で、左端のLEDまで点灯させます。 2進数で10000000です じゃあ左端を点けたまま再度右から点灯させていくなら 10000001 -> 10000010とシフトしていけばいいのか、と 別に変数を用意し、+ したのですが なぜかこれだと 二個同時に点いたります。 ifで分けてやると思い通りの点灯パターンを行うのですが 「(ifとか使わず)一行でやれよバカ」だそうです。
281 名前:デフォルトの名無しさん [2009/11/05(木) 21:47:09 ] 二個同時と言うのは左端を含めずに二個です シフトしていくLEDと隣り合ったLEDが点いて消えたり点いたり、 一緒にシフトして行ったり shます
282 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:53:05 ] 1行とか言ってるソイツがアホなだけだろ。
283 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 21:54:30 ] ほんと日本語へたくそだな if使ったコード晒せよ
284 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:02:38 ] >>280 でけたwww int i,j,hoge;for(i=0,LED=0;i<8;i++){hoge=LED;for(j=0;j<8-i;j++)(LED=hoge|(1<<j)),*p=LED;} その説明では状況が分からん
285 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:03:19 ] 00000000 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 10000001 10000010 10000100 10001000 10010000 10100000 11000000 11000001 11000010 11000100 11001000 11010000 11100000 こんな感じ?
286 名前:デフォルトの名無しさん [2009/11/05(木) 22:06:50 ] そうです LEDが16コあって、そのうちの8つがLEDコントローラA 残りの8つがBに繋がっちょります が、8つ点ける時点でつまずきました
287 名前:デフォルトの名無しさん [2009/11/05(木) 22:08:38 ] 10000000 よしここから右端から点けよう 10000001 点いた 10000011 あれ? 10000110 あれ? 10000111 おや? 10001101 なんじゃ なんてことになってます。
288 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:11:50 ] >>287 コードを晒すんだ! そのほうが日本語より直接的で分かりやすいと思う
289 名前:デフォルトの名無しさん [2009/11/05(木) 22:15:53 ] なので、 Fuckintosh = 10000000 + (FuckOSX << 1) とかしたらどうかな、と思ったのですが 上のようにワケのわからんパターンで点灯し ならORで、とやってもだめでした >>288 仕事場に置いてきてまってるもんで 自販機を思い浮かべてもらえれば。 あの多段ボタンLEDそのままなので。 そのLEDは2進数00000000に対応しており、点けたい部位のビットを1にすれば光ります 10000000なら左端、00001000なら右から4番目、というふうに
290 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:17:53 ] >>285 をテーブルに入れて垂れ流せばいいよ。
291 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:18:19 ] >>289 この時期まで研修とは… 大企業だな 裏山鹿 >>284 でおk
292 名前:デフォルトの名無しさん [2009/11/05(木) 22:18:26 ] あー違った Fuckintosh = 10000000 + (FuckOSX << 1)の 10000000 の部分は決め打ちではありません。 変数です。 if(FuckMac >= 10000000) Fuckintosh = (FuckMac + (FuckOSX << 1)); という感じですかね
293 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:21:35 ] 2進数10000000は、16進数で0x80, 左端と右端を点けるには10000001、つまり0x81 やはり左端の値を保持して、新たにシフトさせていく変数を用意し 左端の値と足していけば順次シフトできるんじゃなかろうか、 と思ったのです。
294 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:39:35 ] つーか、ビット操作なら unsigned でやれよ。
295 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:58:53 ] 排他的論理の計算ってどんなときに使うんですか? 101100110 110011101 011111011 になるのはいいんですが、この計算はたとえばどんな時に使用されるの?
296 名前:デフォルトの名無しさん [2009/11/05(木) 22:59:47 ] stdioはstandard input outputの略 ではprintfやsacanfとかって..... 語源とか気になる関数とか多いです
297 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 23:03:17 ] >>295 フラグの入れ替えとかハッシュ計算とか
298 名前:264 mailto:sage [2009/11/05(木) 23:07:50 ] >>272 11桁ですか? おそらく弾かれて、プログラム終了となるんじゃないかと思うのですが…
299 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 23:09:48 ] >>295 特定のビットだけ反転させたいときだな。 あまり使う機会はない。 >>296 print や scan に format の f 付けただけ。
300 名前:デフォルトの名無しさん [2009/11/05(木) 23:14:03 ] >>299 おお、こんなに早くお返事が!!! サンクスです 検索かけても語源とかなかなか出てこなくって 「UNIXの古い資料調べれば全部分かる」 みたいな話はどこかに書いてありましたが それもちょっとよく分からん話だったんで
301 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 23:27:38 ] 1ビットずつフラグに使ってたら、反転させたいときもあるんだろうな
302 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 23:43:26 ] >>296 print formatted output その他気になるのは↓で探すよろし www.opengroup.org/onlinepubs/009695399/mindex.html
303 名前:デフォルトの名無しさん [2009/11/06(金) 00:09:44 ] ボタンとかのオブジェクト配置するには? 画面の出し方は死ぬほどサンプルあるけれど
304 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:34:17 ] いきなりなんだよwww windowclass にボタン指定しろよw
305 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:39:22 ] スレ違い
306 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 00:45:15 ] >>295 RAID5の計算とか CRCとか 画像処理とか A = 101100110 B = 110011101 A xor B = C C = 011111011 C xor A = ... C xor B = ...
307 名前:デフォルトの名無しさん [2009/11/06(金) 02:55:03 ] >>302 リンク先までありがとうございます 正直、英語は読めないので何をどう見たらよいやら分かりませんが調べてみます やはりプログラマーは英語必須なんでしょうなあ
308 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:59:12 ] 英語読めなくてもプログラマやってる奴は結構いるよ カスばっかだけど
309 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 03:03:42 ] プログラミングコンテストの問題が英語だから理解出来ないとかね プログラミング以前の段階で淘汰されてて面白い
310 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 03:08:20 ] 職業としてやるんじゃなかったら英語なんてたいして必要ない。 英検三級ありゃやっていける。
311 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 03:39:30 ] int main() { unsigned char LED = 0x01; int i,j,n; for (i = n = 0; i <= 36; n=++i) { LED = 0; for (j = 8; j > 0; n-=j*(n>=j),j--) { LED |= (n>=j)<<(j-1); } for (j = 7; j >= 0; j--) { printf("%d", LED >> j & 1); } printf("\n"); } return 0; } どうしてこうなった
312 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 04:21:24 ] unsigned char func(int n) { unsigned char LED = 0; int i, stack = 0; for (i = 8; n > i; n-=i--, stack++); LED = ~0 << (8-stack) | !!n << (n-1); return LED; } int main() { int i,j; unsigned char LED; for (i = 0; i <= 36; ++i) { LED = func(i); for (j = 7; j >= 0; j--) { printf("%d", LED >> j & 1); } printf("\n"); } return 0; } がんばってこれか
313 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 06:00:48 ] stackをループじゃなくて2次式を解くことでできそうな気がするけど、またあとで。
314 名前:デフォルトの名無しさん [2009/11/06(金) 15:15:26 ] Cは無限ループifしなくても何かが起こったときに 関数に飛ぶことはできないの
315 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 15:16:46 ] 日本語でおk
316 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 15:17:11 ] >>314 日本語でOK。
317 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 15:20:07 ] >>314 signal()
318 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 15:45:21 ] 教えてやるから日本語で質問しろ。
319 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:01:10 ] 馬鹿は回答するな
320 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:02:26 ] >>314 atexit()
321 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:12:23 ] >>314 標準Cには、そういう仕掛けはない。 Win32 API なり、Pthreads なりを使うわけだが OS が特定できんことには。
322 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 17:15:23 ] signalは標準だろボケ 無知は黙ってろよカス
323 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 17:31:42 ] >>322 では一つ、signal()の標準的な使い方を教えてくだされ。
324 名前:デフォルトの名無しさん [2009/11/06(金) 17:37:51 ] 問題文を出力するなどのため、 引数の内容が長文化した場合、(継続文字?)について教えてください。 例えば、プリントエフ関数で、長文を表示させる場合、 printf("1行目から2行目\n3行目から4行目\n"); といったように書いていったのですが、 当然ながらだんだん見えなくなってくるので、 printf("・・・・3行目から4行目\n" "5行目から6行目\n6行目から7行目\n・・・・"); と、表示していくことになりますが、 他によい方法はないのでしょうか。 こういう場合、どういう方法が一般的なのでしょうか。 プリントエフで一個ずつ表示するものなのでしょうか。
325 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 17:41:12 ] SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM は標準のようだ 質問の「何か」っていうのが具体的に何かわからないと何ともいえないが
326 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 17:43:30 ] >>324 俺なら1行ごとに分ける printf( "1行目\n" "2行目\n" "3行目\n" ・・・・ "最終行\n"); それか、問題文を別ファイルから読み込む
327 名前:デフォルトの名無しさん [2009/11/06(金) 17:52:34 ] >>326 なるほど1行ずつですか。 >>それか、問題文を別ファイルから読み込む 買ってきた本でもファイルの入出力を最後のほうで取り上げています。 なんとかそこまで早くたどり着きたいものです。 最終的にはプロンプトでサウンドノベルみたく動く文字出力を実現したいです。 あの、1文字、1文字、動いていく感じがたまらなくいいので。 たぶん繰り返し処理とか使うんだろうなあとは思っているのですが。
328 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:08:36 ] 優れたプログラマ=論理演算多用 if少ない if((A >> B) |= C) != ( ((D >> E) << F) &= (G | H)){ VAR = I >> (J |= (K + L)); }
329 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:10:13 ] >>328 馬鹿?
330 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:11:20 ] 劣ったプログラマ=if多い if() if() if() if() if() else if() if() if() else if() ifを判定するだけで最低1クロック無駄にする
331 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:18:10 ] Cでどう短く書くかより、実際の効率で考えるべき
332 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:39:47 ] ものすごいアホがいる。
333 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 18:43:02 ] >>328 まだ減らせるぞw ((A >> B) |= C) != ( ((D >> E) << F) &= (G | H))&&(VAR = I >> (J |= (K + L)));
334 名前:デフォルトの名無しさん [2009/11/06(金) 19:22:57 ] >>324 ふつーは printf("一行目\n"); printf("二行目\n"); printf("三行目\n"); printf("四行目\n");
335 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 19:46:24 ] printf("四行目\n",printf("三行目\n",printf("二行目\n",printf("一行目\n"))));
336 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 20:05:35 ] >334,>335は関数呼び出しコストを度外視しているところが間抜け。 一回で済むことを4回もやるな。
337 名前:デフォルトの名無しさん [2009/11/06(金) 20:15:43 ] それ以前に、ただの文字列出力にprintf使う奴はプログラマーに向いていない。
338 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 20:18:32 ] まあ普通は DrawText() 使うよな。
339 名前:デフォルトの名無しさん [2009/11/06(金) 20:20:03 ] 関数くらい人に教わる前に自分で習得しろって? そりゃ俺も C 始める前にアセンブラで PRINT マクロ作ってたさ、そのアセンブラも自作でね けど今どうなんだろう? C の printf には BASIC の PRINT コマンドほどの教育力あるんかね 俺個人としては、かえって饒舌すぎるところがあるように思えるんだが
340 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 20:24:32 ] まぁ、まともなコンパイラならprintf()の代わりにputs()を使うくらいのことはするからな。
341 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 20:50:57 ] それだと結果が変わってしまうな。
342 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 20:53:29 ] いまどきのコンパイラなら334も324も最適化で同じになるだろ。
343 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 21:11:57 ] 結局どう表示したいのか一目でわかるのが>>326 の良いところ
344 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 21:49:55 ] 結局トレードオフなんあぢょ。
345 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:06:53 ] あるアドレスに名前を付ける時ってどうするの?
346 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:14:14 ] >>345 マクロとか変数名とか名前-アドレスマップとか
347 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:15:57 ] ポインタ
348 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:19:10 ] >>347 初心者は黙ってろ。
349 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:28:10 ] × DIV = (300 / 2); ○ DIV = (300 >> 1)
350 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:39:15 ] 一番やりがち、真っ当なのはdefine #define 90000000 adressV125
351 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:41:20 ] >>348 ぬるぽ
352 名前:デフォルトの名無しさん [2009/11/06(金) 22:42:13 ] >>350 釣り針でかすぎw
353 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:47:28 ] コンパイラが対応していれば、#plasmaでもいい。 でもプラズマは本当に「そのプラットフォーム専用」でないと用意されていない。
354 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:53:32 ] 本命は l だと思う。
355 名前:デフォルトの名無しさん [2009/11/06(金) 22:59:59 ] #import
356 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 00:46:37 ] DXライブラリを使用して今までは正常にコンパイルできていたのですが、PCのフォルダなどを整理してから、 Fatal: ファイル VORBISFILE_STATIC.LIB が開けません とメイク結果に表示されコンパイルできなくなってしまいました。 エディンタの再設定もしてあり、必要なファイルはあると思うんですが... だれかアドバイスいただけないでしょうか。
357 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 00:55:41 ] ここはそんな質問する場じゃない
358 名前:デフォルトの名無しさん [2009/11/07(土) 01:04:48 ] DBに接続するためのパスワード文字列をソースに埋め込もうと 考えたんですが、stringsコマンドでバレてしまいますよね。 通常は暗号化したパスワードを文字列として持たせるのがベターなんでしょうか?
359 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 01:39:49 ] >>357 すみません初心者用の本でライブラリを使いなさいと書いてあったんです... 本の通りにやり直してもできないんです
360 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 01:41:28 ] ここはそんな質問する場じゃない!
361 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 02:39:25 ] 気合い入れてもう一回ググッてきます。がんばってきます
362 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 10:18:05 ] フォルダの整理って何したんだよ?
363 名前:デフォルトの名無しさん [2009/11/07(土) 11:09:18 ] makeしたら負けだと思う。
364 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:46:42 ] >>363 自分で書いて面白いと思ってんの?
365 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:50:14 ] おつにゃん
366 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:17:46 ] printf("\ 1行目\n\ 2行目\n\ 3行目\n\ ・・・・ 最終行\n\ ");
367 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:20:21 ] それインデンツできないから×
368 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:31:46 ] printf( "1行目\n" "2行目\n" "3行目\n" ・・・・ "最終行\n" );
369 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:06:46 ] char *s=" #include "hoge.txt" "; printf(s);
370 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:34:37 ] if(fgets(str, sizeof(str), stdin) == NULL) が成り立つことってあるのでしょうか。
371 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:45:41 ] ファイル終端。
372 名前:370 mailto:sage [2009/11/07(土) 17:50:17 ] キーボードからの入力でファイル終端ってどういう場合なんでしょうか
373 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:54:11 ] >>372 Ctrl-Z とか Ctrl-D とか ファイルリダイレクト とか
374 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:54:12 ] >>372 Windows なら ctrl + z *nix なら ctrl + d だっけか?
375 名前:370 mailto:sage [2009/11/07(土) 18:02:17 ] ありがとうございます
376 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 18:47:31 ] define BUF 1024 char buffA[BUF], buffB[BUF]; char** str; int needss, i, j, x, y; 質問です。上記の変数を利用しプログラムを記述しました。 まったく問題なく実行でき、さらに処理を追加しようと新たに char buffC[BUF]という配列を宣言すると、エラーを吐くようになりました。 どうも、char型の変数を増やすとbuffBに文字列が格納された瞬間にエラーがでます。 変数名を変えても改善しませんでした。 プログラム自体には問題なく、当然コンパイラーは警告すらでません。 何が問題なのかまったく分からず困惑しています。 変数名が悪いのか、配列の要素数が全体で見れば多すぎるのかと思いましたが、そんなことはないはずですよね・・。 環境はUbuntu9.04 コンパイラGCC エディタEmacsです。 エラーの考えられる原因はなんでしょうか。
377 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 18:50:07 ] object-CってC使いに易しいかな? iMacポチって待機中なんだけど…
378 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 18:53:18 ] >>376 スタックオーバーフローか未初期化のポインタで何か操作しようとしてる可能性が高い
379 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:07:01 ] >>378 ポインタはmallocでメモリを確保しています。 というか、変数を追加しなくても、実行できなくなりました・・。 mallocで確保したメモリがfreeで解放できずスタックオーバーフローになっているという落ちとかでしょうか。。
380 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:13:01 ] malloc はスタック関係ねー
381 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:13:11 ] >>379 bufBに文字列が格納された時にエラーが発生という 場合、格納しようとしている文字列に問題があると 考えられる。多分読み出してはならない領域を 指すポインタだとか.... 正確なことはソース見なければわからないんで うpローダ使ってアげてみたら?
382 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:15:04 ] まあどうせ単なるショボバグだろうな。
383 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:18:20 ] コンパイラのせいにしたいのがみえみえ
384 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:19:29 ] >ポインタはmallocでメモリを確保しています。 というが、 >define BUF 1024 >char buffA[BUF], buffB[BUF]; >char** str; >int needss, i, j, x, y; の中にあるポインタはstrしかなく、 そこにmallocの戻り値を格納するとしたら、多分 (charの配列ではなく)char*の配列を確保しているわけで 何かもうそもそもソースがおもしろいことに?^^
385 名前:376 mailto:sage [2009/11/07(土) 19:22:31 ] ネタコメント削除してソースうpしますです。。
386 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:24:04 ] (* (char *) ABC_easy_as_a_123)(int); これどういう意味ですか。 ポインタ型charにキャストするなら最初からそうやったらいかんのですか。
387 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:25:56 ] >>386 関数のポインタだろうけど、なんぞこれw
388 名前:376 mailto:sage [2009/11/07(土) 19:33:16 ] ttp://codepad.org/dcYqWa30 うpしました。ダメ出しお願いします。
389 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:34:35 ] struct SomeStruct { // ・・・ }; と書けばいいのになんで typedef struct { // ・・・ } SomeStruct; と書くのが巷で流行ってるの?
390 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:39:41 ] structをtypedefしないんだったらそいつへのポインタを 使うのはダサイかも
391 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:40:35 ] ヒント:構造体を使う時
392 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:42:56 ] 構造体は、struct タグ名 で宣言するが これで宣言したのはタグ付きの構造体の中身であって、 型として認められていない。 ここでtypedef を用いると、「SomeStruct型の構造体である」ことを認めさせることになる。 typedefを使わないと、 struct SomeStruct MyStruct; と別に一行必要になり。これでようやくSomeStruct型の構造体と認められるわけだ つまり、構造体の「型宣言」と同時に「構造体として使えるように名前もつけてしまおう」という横着した手法なだけだ。 構造体は、述べたように最初の段階では使用できる構造体として認められない。 必ず、「SomeStruct型の構造を持つ○○」という名前をつけてやらなければ使用できない。 だからtypedefで型と名前を同時に決めることもよくある話。
393 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:47:01 ] C++だと、これを勝手にやってくれちゃってんで面倒なことにもなりかねない。 Cの頃からtypedef structでやっていればC++って何て便利なんだ!と思うかもしれないが あれは余計なお世話といってよい。
394 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:47:04 ] 理屈っぽ
395 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:49:40 ] >>388 /*ここで必要な箱の数が分かったのでmallocで領域を確保*/ /*forで必要な行数回、1行の文字数のchar型の領域を作成*/ str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) ); for (i = 0; i <= needBr; i++){ str[i] = ( char * )malloc(oneLineLen * sizeof (char) + 1); }
396 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:52:04 ] >>392 なんか勘違いしてるっぽいな。
397 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:53:53 ] strに実体がないような?
398 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 19:57:45 ] str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) ); ↑ 思いっきり書き忘れていました・・。 しかも括弧付けわすれで評価が意図しない形になる(はず)になっていました。 charが1バイトなので+1で大丈夫だっただけですよね・・。
399 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:01:04 ] ?
400 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:03:02 ] !
401 名前:376 mailto:sage [2009/11/07(土) 20:11:20 ] 9文字入力して4文字で改行で実行したりすると *** glibc detected *** ./a.out: double free or corruption (out): 0x082b9018 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6[0xb7dfc604] /lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7dfe5b6] ./a.out[0x8048823] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7da3775] ./a.out[0x8048521] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out 08049000-0804a000 r--p 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out 0804a000-0804b000 rw-p 00001000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out 082b9000-082da000 rw-p 082b9000 00:00 0 [heap] b7c00000-b7c21000 rw-p b7c00000 00:00 0 b7c21000-b7d00000 ---p b7c21000 00:00 0 b7d8c000-b7d8d000 rw-p b7d8c000 00:00 0 b7d8d000-b7ee9000 r-xp 00000000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so b7ee9000-b7eea000 ---p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so b7eea000-b7eec000 r--p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so b7eec000-b7eed000 rw-p 0015e000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so b7eed000-b7ef0000 rw-p b7eed000 00:00 0 b7ef0000-b7efd000 r-xp 00000000 08:08 2779 /lib/libgcc_s.so.1 b7efd000-b7efe000 r--p 0000c000 08:08 2779 /lib/libgcc_s.so.1 b7efe000-b7eff000 rw-p 0000d000 08:08 2779 /lib/libgcc_s.so.1 b7eff000-b7f03000 rw-p b7eff000 00:00 0 b7f03000-b7f04000 r-xp b7f03000 00:00 0 [vdso] b7f04000-b7f20000 r-xp 00000000 08:08 6255 /lib/ld-2.9.so b7f20000-b7f21000 r--p 0001b000 08:08 6255 /lib/ld-2.9.so b7f21000-b7f22000 rw-p 0001c000 08:08 6255 /lib/ld-2.9.so bf80c000-bf821000 rw-p bffeb000 00:00 0 [stack] Aborted とかもうね・・・。
402 名前:376 mailto:sage [2009/11/07(土) 20:15:23 ] 謎のエラーはmallocが1行抜けてたからのようです。。 395さんはじめありがとうございました・・。
403 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:34:31 ] この先、メモリが10GBとかになったらC言語じゃ対応できなくね? CってポインターがINTで4294967295までしか設定できないよね それ以上のアドレスは指定できないけどどうすんの?アドレスが5000000000とかの指定できなくね?おわた
404 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:41:56 ] はいはいワロス
405 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:44:30 ] ポインタがint値だなどと誰が決めたのだ。 ポインタはポインタであってポインタでしかない。 多くの実装でlong intに変換可能だというだけ。 なんだったら見たこともない宇宙文字列で実装してもいいのだ。
406 名前:デフォルトの名無しさん [2009/11/07(土) 20:54:08 ] >>403 どれでもいいから 64bit 版のコンパイラで sizeof(void*) を表示してみそ
407 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:56:10 ] long long long long long long long long long long long long long long long long long long long long int
408 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:57:50 ] >403 メモリが10GB(仮想記憶含まず)ならCPUもそれを指定できないとダメ子さんになるから (intは何ビットか計算するの面倒だからやらないまぁ、64bitで十分だろうけど) CPUのbit数xが10G < pow(2, x)を満たす必要がある intはpow(2, x)なるbit数であるのが一般的である また、規格ではポインタがintに変換できるとは書かれていない C99からintptr_tとか入った気もするけど、マジックリストにでも使うんですか とか思って特に調べていない
409 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:02:02 ] 某ランドのコンパイラとかがC99に対応していない long longが使えない
410 名前:デフォルトの名無しさん [2009/11/07(土) 21:04:17 ] C99 はロールバックしたうえで、C201x を練り直して欲しい
411 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:07:07 ] >>403 2038年までにはCは終わってる
412 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:09:47 ] >>409 long long 使えるよ C99には対応してないけど ECC6.1.0(Embarcadero C++ Compiler)な
413 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:16:44 ] time_t を使っているからコンパイラが対応してれば 2038年は超えられる
414 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:20:51 ] そりゃ何とかするでしょ もっと新しいいい言語が出ていればそっちに変わっているだろうが、 2038年にまだC言語が使われていれば何とかするしかない
415 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:22:27 ] あと30年も生きていられるわけないじゃないか^^
416 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:25:08 ] おまえ何歳だ?
417 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:28:06 ] 30年もすれば日本は消滅して日本人は貧困にあえぎプログラミングどころかパソコンに触る機会もないよ
418 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:28:45 ] C言語で楽しくプログラミングする人の集まるスレだから、アンチは別のスレに行ってよ time_tを変えて再コンパイル、リンクするか64bitCPUに移行すれば、2038年問題なんて大したことではない 30年後もx86さまさまの人は時代後れを認識した方がいいと予言しておく
419 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:29:49 ] 64bitCPUとtime_tは関係があるわけ?
420 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:31:16 ] 64bitCPUにすれば今までのtime_tは2038年以降も正常に動くんだよ
421 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:35:09 ] 先延ばししただけじゃねーの?
422 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:40:35 ] 先延ばしじゃない方法があるのか?
423 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:44:57 ] 永遠はあるよ
424 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:49:41 ] time_tは有限?
425 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 21:50:37 ] その都度仕様を変えれば無限とも言える
426 名前:デフォルトの名無しさん [2009/11/07(土) 22:01:29 ] 64bit でも 292277026596年問題が残るが、その頃のマシンがバグったらグレートウォールごと吹っ飛ぶとかあるのかな
427 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:04:34 ] そこまでくると、さすがに超人ロックくらいしか生きてないだろうな
428 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:04:51 ] >>426 その頃にはさすがに人類は死滅してるよ
429 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:07:17 ] >>420 CPU関係ねーよカス
430 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:08:23 ] 嫌味で言ったつもりだったが、なに釣られてんのwww
431 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:08:38 ] いやいや。 今仮に18歳のぴちぴち大学1年生でも 30年後は48歳だよ? 48歳の人はあんまりもうプログラムはしてないんじゃないかな。 経営側か、現場であっても少なくとも設計よりの仕事をしていて もうやりたくてもプログラムなんてさせてもらえなくて 夜遅く家に帰ると妻はうるさく、娘には嫌われ、 トイレ横の物置を改造して作った名ばかりのパソコンルームに 30年前に自作したコンピュータがおいてあって、 それの電源をいれてほそぼそと趣味のコードを打ち込むのが日課だったり^^
432 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:11:43 ] >>428 そう思うと勿体ないよな。 これだけの科学技術を創り出すのに、どれだけの時間がかかったことか。 再び文明が生まれたとしても、車輪の再発明をするだけだ。
433 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:13:29 ] 地球が始まった時間に比べれば一瞬の出来事
434 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:21:49 ] >>432 人間が生まれて600万年 だが技術革命はここほんの100年余りの事だ
435 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:22:40 ] もしかしたら今が本来の人間の姿からかけ離れて どうかしてるかもしれないって話
436 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:23:45 ] は?詳しく話してくれないか?それを
437 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:23:58 ] 他の惑星に移住してて、そこで新たにタイムテーブル作ってるから問題なしとか
438 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:24:55 ] リフボードでトラパーの波に乗るんだろうな
439 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:53:51 ] UFOに乗ってる宇宙人なんか肉体無いらしいよ これ以上はオカルト板でしようぜ
440 名前:249 [2009/11/07(土) 23:38:09 ] >>249 です。 まず1列目に1〜9の数字を入れようとして 以下のようなプログラムを作りました。 www.dotup.org/uploda/www.dotup.org339690.c.html しかし上のプログラムでは1列目に同じ数字が出てしまうので 1行目に出た数字は2,3行目には出ないようにしたいです。 それを改良したいのですが方法が分かりません。 教えてください。
441 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:12:03 ] >>440 何がどうなって欲しいの?
442 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:19:22 ] 10進数を10桁の2進数に変換したいんだけどどうやったらいいかわからない 8とか16進数なら表示できるのわかるんだけど、2進数って簡単に表示できないんだっけ?
443 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:21:06 ] C言語は2進数はサポートしてないからね
444 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:22:00 ] AND取ってループすれば出せるでしょ
445 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:22:53 ] 8進数とか16進数の表示を自前でやってみたら
446 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:24:30 ] 2で割っていけばいいんでは?
447 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:27:08 ] >>442 limits.hをインクルードしてsizeof(int) * CHAR_BITで intのビット数を求め、10進数をunsignedにキャストして←ここ重要 1UL << (sizeof(int) * CHAR_BIT - 1)のマスクとandを取った結果が 0か1かを書きだして行く マスクは>>で右シフトしてループ
448 名前:デフォルトの名無しさん [2009/11/08(日) 00:27:48 ] >>441 >>440 のプログラムでは 100 100 300 など一列目に同じ数字が出ることがあるので 500 600 200 のように一列目の各行におなじ数字が出ないように改造したいです
449 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:32:10 ] #include <stdio.h> int main() { int beam = 10; // チゲ int i, n ; // counter for ( n = 0; n != 1024; ++n ) { printf( "%d : ", n ); for ( i = 0; i != beam; ++i ) { printf( "%d", n >> ( beam - i - 1 ) & 1 ); } printf( "\n" ); } }
450 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:44:32 ] >>448 1〜9 までの重複しない3つの数字が欲しいだけ? もしそうならこれでおk { int i, x, n[9]; for(i=0;i<9;i++) n[i]=i+1; for(i=0;i<9;i++) { x=rand()%(i+1); t=n[i]; n[i]=n[x]; n[x]=t; } for(i=0;i<3;i++) cardForNumbers[i+1][1]=n[i]; }
451 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:52:23 ] 先生質問です。 char *ptrを引数として他の関数に渡す時は other_Kansu (&ptr); ですよね? char **ptrを引数として渡すときはどうなるんでしょうか? other_Kansu (&*ptr)ですか?
452 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:58:19 ] ちょっくら驚く豆知識 なんと! なんとなんとなんと! なんとなんとなんとなんとなんとなんと! 4bit CPUでも128bitデータなどを扱えるのである!!!!!!!!!!!! 何をバカな、と思ってるのは素人である。ド素人である。 4bit CPUでは、128bitデータを「1サイクルで」レジスタなどに格納できないだけであって 128 / 4サイクル使って上位4bitもしくは下位4bitから順番にメモリに128bitぶん格納していけばよいのだ。 バカか手前等。
453 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:58:22 ] 面白い質問ですね^^ void other_Kansu( char ** ) に char *ptr を渡したいときは other_Kansu( &ptr ) です。 void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。 &*ptr でもいいですが、それは結局 ptr です。 多分。
454 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:01:19 ] >>451 両方違うともいえるし、両方合っているともいえる
455 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:07:16 ] >>453 非常にややこしいですね・・。 >void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。 passing argument 1 of ‘ptr' makes integer from pointer without a cast って言われるんですが無視でいいんでしょうか・・? >>454 正解は存在しますか・・?
456 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:27:21 ] &* はC言語の仕様上はダメなんじゃないの? int a=10, *p=&a; のとき &*p って &10 でしょ
457 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:36:22 ] ptr が char** だから *ptr は char* であるので 依然としてアドレス演算は可能でしょう^^ >passing argument 1 of ‘ptr' makes integer from pointer without a cast その警告は今回の件とは直接には無関係です^^
458 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:37:03 ] >>447 右シフト使わない前者のでunsignedにする理由って何?
459 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:38:43 ] こいつは何をいっているんだ
460 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:39:01 ] 451は、なにか、勘違いしてるような?
461 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:39:27 ] int a=10, *p=&a; *p は a のアドレス(仮に1000番地)を保持 &*p は 1000番地のアドレスを指すので &10ではなくて &(1000番地)で結局1000番地 1000番地は10 ってなる気がする
462 名前:457 mailto:sage [2009/11/08(日) 01:40:41 ] あ、上の2行と下の2行は別の書き込みへのレスです^^ ごっちゃになってしまいました^^
463 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:42:11 ] >>452 いきなり何の話してんの? 上のメモリに関する話にしては話がズレすぎてるし、その豆知識をどうしたいんだ。 >>455 深く考えすぎ。
464 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:44:48 ] >>457 キャストなしで整数になるの意味が分からないんですが、引数の受け渡し方があってるならどっか根本的に勘違いが発生してそうです・・。 違う視点から警告と向き合ってみますです。 どうもありがとうございました><
465 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:50:11 ] >>464 変数の宣言部、関数のプロトタイプ、関数の実装部を見直してみてはどうか。
466 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:53:13 ] >>464 今ちょうど見直してましたが、間違っては無さそうです。 他の関数へは上手く**ptrが渡せてるみたいなのですが・・。 該当部分をもう一度書き直して見ます・・。
467 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 01:54:38 ] >466 ソースきぼん
468 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:02:05 ] >>467 変数名とか・・・かなり恥ずかしいんですが(/////) ttp://codepad.org/Pb1xslqO
469 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:02:55 ] >>467 hoge.c:68: 警告: passing argument 1 of ‘addStr’ makes integer from pointer without a cast 書き忘れました。。
470 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:07:30 ] void addStr (char *causeBuf, int causeNeedBr, int causeOneLineLen, char** causeStr)
471 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:11:06 ] >>470 お、お見事です・・。
472 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:16:36 ] 完全に見るところを間違えてました・・。 ゴールが見えそうです。 ありがとうございました><
473 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:21:08 ] argument 1 of ‘addStr’ ちゃんと警告よみましょうねっていう。
474 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:23:23 ] 英語の知識か日本語のコンパイラがあれば読めてました><
475 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:26:34 ] 英語が読めなくてもいいから、今回のような失敗の時はこういう警告がでるのだということを覚えておくといいよ。 そうすれば、次に同じ警告が表示されたとき、やっぱり読めないけど、 一個目のパラメータに変なの渡してるんだなということが分かるようになる。 これはこれで慣れ。ガンガレ
476 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:32:29 ] そうですね。 今回のでまた1つ覚えました>< C言語歴というか、言語歴2ヶ月なんで始めて出会すエラーが多く、エラー文が読めても意味がわからないことばっかりです。 頑張って完成させます。。
477 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 04:40:09 ] >>458 遅レスだけど intだと環境依存だが符号ビットが立っていると右シフトすると おかしなマスクになる事があるから
478 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:07:52 ] シフトに関してもアセンブラが優れている。 Cのシフトは問答無用、見境なく全部シフトさせてしまうが アセンブラなら大抵、符号ビットを残したままシフトさせることができる。算術式シフトってやつだな!
479 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:11:51 ] それCPUの機能であってアセンブラがどうのとは違うのでは
480 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:12:44 ] strstr関数をライブラリ無しでやるには?
481 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:18:09 ] ポインタをインクリメントしながら文字比較をしていくしか
482 名前:デフォルトの名無しさん [2009/11/08(日) 11:21:45 ] 遅くてもいいんなら、 一文字ずつ比較する文字列比較を、開始位置を一文字ずつずらしながらループする。
483 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:29:55 ] string s="abcde"; s="abcdef"; ってやったら、最初の行で作ったabcdeがメモリ上にのこっちゃって効率悪いんでしょ? ガベージコレタクに頼らず自分でメモリに残ってるゴミを消す方法ないの?
484 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:30:02 ] なつかしいな。 BM法とか勉強した記憶が。
485 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:33:04 ] >>483 リテラルを使わなきゃいいんじゃねw
486 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:40:24 ] string *s = new string("abcde"); *s = "abcdef"; delete s;
487 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:44:16 ] unsigned charは1byteでmalloc(size)はunsigned char [size]と同じ大きさの連続メモリを返すってのは規格を満たすすべての処理系で正しい?
488 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:00:40 ] ループ毎に、配列でいう1番目をサーチし、ヒットがあったなら次に2番目をサーチし、またあれば3番目をサーチしたいのですが、ちなみにヒットする項目がなければ配列に登録します ただやりたいのが、配列1番目が1byte、2つめが4byte、最後が4byteとなっているのですが、これらを管理する上でいい方法はないでしょうか?
489 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:01:09 ] >>477 おまえは にほんごが よめないのか?
490 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:04:01 ] 変数初期化のとき*が2つついてる奴あれ何?
491 名前:デフォルトの名無しさん [2009/11/08(日) 13:05:55 ] >>490 ポインタへのポインタ
492 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:18:41 ] >>488 配列で異なるサイズのデータを扱う方法を訊ねてるとして 普通は、1)最大に合わせる、2)unionで全部をひとつの型にまとめる あたり
493 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 13:55:13 ] >>490 *は何個でも付けれるぞ int ************p; みたいなのもok
494 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:04:45 ] (*************printf)("HELLO.");
495 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:18:19 ] 先生質問です。 char** pptr; char strA; int num1,num2; //領域確保 pptr = calloc ( (num) , sizeof (char)); for (i = 0; i <= num1; i++){ pptr[i] = calloc ( (num2 + 1) , sizeof (char)); } //文字代入 for (i = 0, j = 0; i < num; i++, j += num2){ strncpy (pptr[i], strA + j, num2); } この処理でnum1に5以上の値が入るとSegmentationFaultになります。 デバッガではstrncpyのラインがSegmentationFaultの原因ラインとでます。 printfで表示して確認してみると、num1でnum2が割りきれ、かつnum1が5以上のときに pptr[0][0]に領域以上の文字化け表示が出るときが有ります。 この部分の記述で不味い点があるのでしょうか?
496 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:20:37 ] ポインタのポインタってポインタで代用できないの??? ポインタのポインタと言えどもポインタであることは間違いがないので ポインタのポインタとするのではなく、ポインタへのポインタでしても ポインタのポインタであることは変わりがないじゃないの。
497 名前:デフォルトの名無しさん [2009/11/08(日) 14:22:35 ] ポインポインポインポインポインポインポインポインポインポイン ポインポインポインポインポインポインポインポインポインポイン ポインポインポインポインポインポインポインポインポインポイン ポインポインポインポインポインポインポインポインポインポイン ポインポインポインポインポインポインポインポインポインポイン インポ
498 名前:デフォルトの名無しさん [2009/11/08(日) 14:25:28 ] pptr = calloc ( (num) , sizeof (char)); はまずい。 pptr = calloc ( (num) , sizeof (char *)); にしろ
499 名前:デフォルトの名無しさん [2009/11/08(日) 14:32:27 ] >>496 typedef int *pint; pint *p = N;
500 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:32:36 ] ポインタって int *p; *p = Hogeragecho; とするときと p = hogeragecho; とするときがありますが 何が違うのですか。 どういうときにアスタリスクを意識しないといけないのですか。 明らかにアドレスを要求している文脈のときはアスタリスクつけなくていいのは分かりますが 明らかにアドレスではないものを要求しているときでさえアスタリスクつけないソースもあります。
501 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:34:59 ] そのソースがバグってんだろ。 見せてみ
502 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:35:09 ] >>498 見事に改善しました・・。 ありがとうございます! sizeof (char) と sizeof (char*)では確保される領域の大きさが変わるのですか? ggr先生に聞いてみますが、よろしければ後学の為ご教授ください。。
503 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:38:31 ] printf("sizeof(char) = %d, sizeof(char*) = %d \n", sizeof(char), sizeof(char*));とかやってみ
504 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:42:02 ] >>503 sizeof(char) = 1, sizeof(char*) = 4 になりました。 char*は1バイトじゃないのですね。
505 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:53:03 ] ポインタだからな アドレスが32bit環境なら32bit(=4バイト)
506 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:56:19 ] >>505 とてもわかりやすい説明ありがとうございます。 ポインタのサイズにも気をつけます
507 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:03:45 ] 6502でさえ16ビットあるだろ。
508 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:39:19 ] いい加減、バイトサイズは定めるべきだと思う shortだとかlongだとかじゃなく 8bitにしたいなら、int8 16bitにしたいならint16 とか、明確にサイズを決められると見易く、いろいろ便利なのに
509 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:43:59 ] バストサイズに見えた。
510 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:45:05 ] typedefすりゃいいじゃん
511 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:45:15 ] fortranのようにreal(8)とかでいいのにね
512 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:27:46 ] stdint.h があるだろ
513 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 19:27:00 ] >>477 しってる。だから「右シフト使わない前者」に限ったんだ。
514 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 19:29:04 ] >>487 > unsigned charは1byteで うん > malloc(size)はunsigned char [size]と同じ大きさの連続メモリを返す 管理領域を含むから少し大きいかも。少ないことはないし、連続していることも確実
515 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 20:54:22 ] ツェー程度の言語仕様で悩んでるようだと 「ツェーたすたす」とか「風呂釜掃除用薬剤」で発狂すんぞ
516 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:07:14 ] その言い回しカッコイイすね先輩
517 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:09:12 ] ツァーだろ常孝
518 名前:デフォルトの名無しさん [2009/11/08(日) 21:48:41 ] 0から1023までの10進数を2進数に変換するプログラムを作っているのですがうまくいきません 数値をしっかり指定すれば表示されるようになるのですが、forで0から1023まで繰り返してやろうとするとうまくいかないみたいです アドバイスお願いします #include <stdio.h> int main(void){ int nisin[10]; int i, j, k; /*入力*/ for(k=0; k<=1023; k++){ k=j; /*変換*/ for(i=0; i<10; i++){ nisin[i] = j % 2; j = j / 2; } /*出力*/ for(i=10-1; i>=0; i--){ printf("%d",nisin[i]); } } return 0; }
519 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:50:10 ] 関数にまとめれば見通しがよくなるんじゃないかな
520 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:51:21 ] j=k;
521 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:51:30 ] >>518 k=j; // 逆?
522 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:58:04 ] どこに10進数が出てくるのやら。
523 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:59:29 ] >>522 1023 じゃね?
524 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:00:20 ] 10進数から2進数にしたいなら まず10進数にするところから始めないとダメじゃん。
525 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:42:01 ] 堰澤映
526 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:14:23 ] 変数のスコープを図示する問題なんですがexternの使い方が本来のものと違うので なんだかわけがわからなくなりました aとbはわかったのでcの部分を教えて下さい #include <stdio.h> extern int a; int b = 2; int func(){ int b; extern int c; b = 3; printf("func: a = %d, b = %d, c = %d\n, a, b, c); c = 6; return 0; } int c = 4; int main(){ extern int c; func(); a = 5; printf("main: a = %d, b = %d, c = %d\n", a, b, c); return 0; } int a = 1;
527 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:19:21 ] グローバル変数の extern と同じ ただし見える範囲が main とか func の中に限られる
528 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:23:17 ] >>527 ということはfuncの中では6 mainの中では4ということですか? でも実行すると func: 〜〜c = 4 main: 〜〜c = 6 となるのですが
529 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:28:52 ] 何をどう考えたらそうなるんだ > int c = 4; とあるので、cの初期値は4だ funcのprintfが実行される時点ではまだ初期値のままだから4が表示される その後 > c = 6; が実行され、それからmainのprintfが実行されるので6が表示される
530 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:41:03 ] >>529 あ〜何となくわかった気がします ありがとうございます
531 名前:デフォルトの名無しさん [2009/11/09(月) 03:26:01 ] C言語のポインタ、配列、ファイルの問題です n件のデータを配列に入力しその平均値を出力するプログラムをつくり、 実行部において添字演算子は用いず、*(p+i)と*p++それぞれを用いるパターンを作る ただし、入出力処理をファイル処理に、入出力ファイル名はコマンドラインで指定する 作れません、教えてください
532 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:29:00 ] 宿題は宿題スレへ 作った所までどこかにあげれば答えないこともない
533 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:38:02 ] ぱっと見、*(p+i)を用いるのが難しそうに思うんだけどなぁ。 iどこで使おうか。
534 名前:デフォルトの名無しさん [2009/11/09(月) 03:38:55 ] #include<stdio.h> int main(void) { int A[100]; int a,b,i,n,*p; *p=A[0]; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",*(p+i)); } for(i=0;i<n;i++){ b+=*(p+i); } a=b/n; printf("%d",a); return(0); } です
535 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:41:19 ] ああやっぱり。p+i使えばp++使わなくなるよなぁ 無理矢理使えって話だろうか
536 名前:デフォルトの名無しさん [2009/11/09(月) 03:41:27 ] *p++ 使ってないぞ
537 名前:デフォルトの名無しさん [2009/11/09(月) 03:43:03 ] 入出力もファイル処理になってないし コマンドラインも無視してるな
538 名前:デフォルトの名無しさん [2009/11/09(月) 03:45:45 ] >>535 それぞれのパターンを作れってことです
539 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:46:51 ] C言語ってintは4バイト、byteは1バイトだけど 自分で新しい型をつくることってできるんの? 6バイト扱える型とか
540 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:48:01 ] >>539 無理 C++みたいにclassが使えないと 構造体とか共用体で無理矢理関数で似たような事は出来るが
541 名前:デフォルトの名無しさん [2009/11/09(月) 03:49:23 ] 宿題は宿題スレへ pc12.2ch.net/test/read.cgi/tech/1255709298/657 貼って来てやったからあっちへ逝け
542 名前:デフォルトの名無しさん [2009/11/09(月) 03:51:06 ] >>539 typedef char newtype[6];
543 名前:デフォルトの名無しさん [2009/11/09(月) 03:53:20 ] >>541 どうもです
544 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 03:58:24 ] >>541 どんだけ親切なんだよ
545 名前:デフォルトの名無しさん [2009/11/09(月) 04:06:41 ] >>538 がしつこいからさ
546 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 04:41:40 ] レスを向こうにコピペしてから誘導するってのはちょっと新鮮だ
547 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 04:54:19 ] if()
548 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:47:20 ] てす
549 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:52:14 ] 配列とは何かって聞かれたら 大量の変数を一括管理するための機能 でいいの?100点?
550 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:53:10 ] 2点
551 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:54:15 ] 配列は配列だろ。それ以上でもそれ以下でもない。
552 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:02:59 ] 配列とは(多くて)名前を付けるのが極度に難しかったり不合理(数字との対応性が高い)だったりする対象に遭遇したプログラマにはからわ れたコンパイラの便宜でつ
553 名前:デフォルトの名無しさん [2009/11/09(月) 13:14:59 ] 単に数が多くて名前をつけるのが大変だからって理由で配列を使うと、 配列の添え字と使用目的を関連づけるのにマクロを使う羽目になるので たくさんの変数名をつけるのがマクロ名になるだけで利点がないばかりか マクロであるがゆえの欠点も抱え込むことになる 正解は >>552 が2番目に挙げた「数字との対応性」
554 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:25:53 ] ダイクストラ/ホーア/ダール共著「構造化プログラミング」の データ構造化序論を読むべし
555 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:29:51 ] 変数の種類が配列じゃなく10万種類とか100万種類ある プログラムを作ってみて、如何にコンパイラが名前のルックアップ 処理に時間をかけているかがわかる筈。
556 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:33:01 ] 添字付き変数
557 名前:デフォルトの名無しさん [2009/11/09(月) 14:13:32 ] >>555 ふつーにありそうだが? float real; float imag; //... が10万とか100万とかある状況下で、 これでどうやって名前のルックアップが軽くできるんだ? float array[100000]; #define real 0 #define imag 1 //...
558 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:21:08 ] グローバル変数の数が配列を一つのものと数えて10万個ある プログラムってそうはないだろw
559 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:28:53 ] struct{ double B,W,H; int born; int age int virgine; }JK00001,JK00002,JK000003,.............JK100000; とするのか struct{ double B,W,H; int born; int age; int virgine; }JK[100000]; とするのか、同じことをするのでもずいぶんと違うんだろな
560 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:42:30 ] >>557 プリプロセッサのシンボルルックアップは重くなるが コンパイラのシンボルルックアップは軽くなるんじゃないか?
561 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:51:42 ] それは
562 名前:デフォルトの名無しさん [2009/11/09(月) 15:25:01 ] >>558 そーだよな 「名前のルックアップ」でいちいち10万エントリをサーチせずに済むようにローカル化するよな プログラム全体で何万エントリあろうが1時点でのルックアップ範囲は狭く済むようにね # ルックアップは何もコンパイラだけじゃなく PG 自身もやるわけで >>559 いや、ここで論じている問題は struct{ double a[3]; int b[3]; }; #define B 0 #define W 1 #define H 2 #define born 0 #define age 1 #define virgine 2 という配列の用法の是非だる?
563 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 15:28:01 ] >>562 オレは #define より enum を使うぜ
564 名前:デフォルトの名無しさん [2009/11/09(月) 16:23:57 ] >>563 列挙子の数が配列のサイズを超えたかどうか、どうやって調べる?
565 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 16:37:39 ] 列挙子の最後にMAXなんちゃらってのを追加して sizeof(配列)と比較する
566 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:03:52 ] 配列の利点はメモリ上に連続して取られることだろ つまり、配列は連続領域を(静的に)確保及び参照するときに使う複合データ型 規格書に書いてあることでも書いたら100点もらえるんじゃないの ISO/IEC 9899:1999 (E) 6.2.5 Types 20 ― An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type.36) Array types are characterized by their element type and by the number of elements in the array. An array type is said to be derived from its element type, and if its element type is T , the array type is sometimes called ‘‘array of T ’’. The construction of an array type from an element type is called ‘‘array type derivation’’. C99でごめんねごめんね
567 名前:デフォルトの名無しさん [2009/11/09(月) 18:36:16 ] >>565 >>566 列挙子を増やすとサイズが自動的に増加する配列があったらなあ・・・ って要求にほぼ答えられる機能があるわけだが、それでも配列でと頑張ると 別に B へのポインタに +1 で W にアクセスなんかできなくていいけど、 レジスタ割付くらい可能なところでは当然やって欲しいなあ・・・ って要求は諦めることになるよな
568 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:38:25 ] int *p; DisplayInside_of_TheVariables = p; DisplayInside_of_TheVariables = *p; これは何がどう違うのですか。
569 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:42:09 ] 36)オブジェクト型は不完全型を含まないので,不完全型の配列は作ることが出来ない。
570 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:44:19 ] >>568 上はint*型の代入で下はint型の代入
571 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:51:58 ] >>567 こんなんでどや? gcc でならコンパイルできるぞ #include <stdio.h> enum{HOGE0, HOGE1, HOGE2, HOGE_MAX}; int main(void){ int i, a[HOGE_MAX]; for(i=0;i<HOGE_MAX;i++) a[i]=i; printf("%d\n", a[HOGE_MAX-1]); return 0; }
572 名前:デフォルトの名無しさん [2009/11/09(月) 23:10:56 ] >>571 その HOGE_MAX ってのを自動というかどうかだが、 その例で HOGE_MAX としている列挙子がいかなる識別子とも干渉しないことを担保する 普遍的な方法論はあるのか?
573 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:56:07 ] >>572 そんなのある訳無いじゃん 強いて言うなら命名規則で頑張る
574 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:04:53 ] ゲーツェーツェー
575 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:09:31 ] X Windows Systemに代表されるようにプレフィックスをつけて長い関数名になるんですね、わかります そんな僕は、JPEGやCore Foundationの書き方をリスペクトしている
576 名前:デフォルトの名無しさん [2009/11/10(火) 00:27:40 ] 自分の揚げ足を取ることになるが「いかなる識別子」というからにはマクロ名まで含んでしまうな #define a b int a, b; //oops! ・・・て、そういう意図じゃなくwww enum hage {HOGE0, HOGE1, HOGE2}; int a[sizeof(enum hage)]; で自動的に int a[3]; になるような方法ね 仮に HOGE3 を追加する場合、HOGE3 自身と HOGE0, HOGE1, HOGE2 との間に どんな関係を保証させればよいのか、さらに保証させなくてよい(保証させてはいけない)のか、 によって色んな構文・機能を使い分けるわけだよな そこで配列という選択に至る、なるべく仮定の少ない例を聞いているわけだ
577 名前:デフォルトの名無しさん [2009/11/10(火) 00:41:32 ] あきらめたらどう
578 名前:デフォルトの名無しさん [2009/11/10(火) 00:43:01 ] 何を?
579 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:50:36 ] >576 sizeof(enum hage)ってなんだよ
580 名前:デフォルトの名無しさん [2009/11/10(火) 01:01:44 ] いやまあ 4 にしかならんけど 配列なら int a[3]; sizeof a / sizeof a[0] で要素の数 3 がとれるだろ? それと同様に、 列挙型から列挙子の数をとる一般的な方法はあるかって話 ちなみに今んとこなさそうって思いながら聞いている
581 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:09:20 ] そういうことね 列挙型の列挙子の数をとる方法ない(気がする) しばしば、一番最後にダミーを入れたりするが、 enum { foo = 128, bar, baz, dummy }; とかしているときには終わっている そもそも何の目的で列挙子の数を知りたいのかによって、 別の解決方法があるかもしれない
582 名前:デフォルトの名無しさん [2009/11/10(火) 01:42:16 ] >>581 ことの発端は >>549 でさ 俺が >>557 と返したら >>571 ときたわけよ ダミー列挙子みたいな不純物を必要としない きれいな方法はバラ変数か構造体で、 配列の用途じゃねえだろって立場をとってたんだ それで仮に列挙子と配列の要素をきれいに対応させる バラ変数や構造体よりも合理的な方法を誰か示したら 俺の負けかなって思って詰ろを作って待っていたんだが みんな寝ちまったみたいだし、俺も眠いし・・・
583 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:55:49 ] >>558 グローバル変数が構造体で1億個とかあるらしい>某住基ネット上アプリ
584 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 02:10:11 ] >>583 ネタだと思いたいが、ひょっとして子[1]、子[2]...は駄目で、 長男、次男、三男...とかになってるのだろうか。
585 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 02:59:01 ] >582 >それで仮に列挙子と配列の要素をきれいに対応させる つまり、それは写像だな 列挙子集合E = {x | x e _N}, 配列A = {y | y e _R}が存在し、 f: x e E -> y e Aなるfを定義すれば良い 最初は全単射と思ったが、単に単射(|E| ≧|A|)であればよかった f def= ∀y e A [∃x e E]ごめん、数学そんなにやってないんだ C言語では、 type_t f(enum E x) { int x_dash; /* do_something */ /* 例えば、x_dash = x / 2; */ x_dash = x / 2; return A[x_dash]; } もっとも、 type_t A[N]; /* N = 128とか */ type_t *map(type_t *array, enum E x) { return (array+hash(x)); } int hash(int x) { return x % sizeof A; } となるが、これが合理的かと問われたら、 まったく合理的ではありませんでした、ありがとうございました と言うよりこれは、整数のハッシュ法じゃないかよ
586 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:21:26 ] C言語に限らないプログラミング言語一般論の領域 になってしまっている件と、生半可な集合論数学表現とか 振り回す人が出てきてる件について、この話題はいったん休止が 良いかと
587 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:28:57 ] >>582 普通についてる>>560 を何でスルーしたんだろうなぁ それはそれとして、cのenumはやっぱ不便だよね。 他言語で改良されてる点はまさに改良だなと思う。
588 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:31:36 ] >>586 しかもあさっての方向の話はじめちゃってるしね
589 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:43:19 ] データ構造上やアルゴリズム上のエレガントな問題解決手段という 理由から配列を使うというのは古き良きアカデミズムな世界の話。 現実のプログラミング現場では名前空間管理の負荷が大幅に 軽減されるというコード作成上のメリットが絶望的に大きいので、 エレガントになろうがなるまいが構造体配列を使わざるを得ない ことが多い。(てかほぼ全て) しかしそこには問題の無理な構造化、規格化による現実との乖離の 危険性が伴うので、問題視する人も多い。
590 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:46:40 ] 構造体も配列も堅固な理論的バックボーンの成果じゃなくて 苦し紛れに作られたシンタックスシュガーに近い
591 名前:249 [2009/11/10(火) 10:13:04 ] >>249 >>440 >>448 ですが >>450 をどこにいれればいいかわかりません… >>440 を基盤に作りたいんですが>>450 はどこにいれるんですか?
592 名前:デフォルトの名無しさん [2009/11/10(火) 10:16:53 ] >>586 ここで出てきている配列と列挙子は、 C に特有の性質を十分に使っているし、 性能面の評価も C 流だが? >>587 コンパイラのシンボルルックアップが 実行時のアドレス計算として持ち越されるわけだが 全レスの義務はないし個人的につまらなかったんで・・・
593 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 11:06:19 ] >>591 消したコードを元に何を言ってるんだ? >>592 プロセッサレベルで元コードが配列として表現 されていたのかそうでないのかを区別することが出来る とでも思っているのか?
594 名前:デフォルトの名無しさん [2009/11/10(火) 11:14:35 ] >>593 色々仮定をおけば区別がつかなくなる場合はありそうだが この流れの中でそんなのに構うつもりはない
595 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:24:11 ] >>592 実行時のアドレス計算は関係ないよね。 コンパイル時のシンボルルックアップ負荷の話でしょう?
596 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:25:39 ] コンパイルにやたらと時間がかかった昔ならともかく、 今でもそういうことって気にすべきものなの?
597 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 12:47:29 ] 昔だって気にしないよ
598 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:32:59 ] そういうことを気にすべきじゃないよ。 けれど、今でもビルドにやたら(数時間でいい?)と時間がかかる場合は少なくともC++でまれによくある あえてこういう表現にしてみた。
599 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:41:48 ] 誤解があるといけないので。 シンボルルックアップのせいでやたらと時間がかかる場合があるということではないです。 もしそうなった場合にそれをコードの面で解決しようとすることはないでしょうね
600 名前:249 [2009/11/10(火) 13:43:31 ] コードきれていました >>249 >>440 >>448 ですが >>450 をどこにいれればいいかわかりません… www.dotup.org/uploda/www.dotup.org348416.txt.html を基盤に作りたいんですが>>450 はどこにいれるんですか?
601 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:22:07 ] 「まれによくある」って2ch語?
602 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:22:35 ] 消えないように貼っておいたげた codepad.org/TuCBekq8
603 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:23:58 ] >>601 2ちゃんではまれによく見るね
604 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:26:34 ] >>601 ググればすぐ答えが出るようなものを、一々質問してんなよw
605 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:27:48 ] まれによくある の解釈 数的には実はよくある がそういうのは集積されており 目にすることは意外に少ない
606 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:34:47 ] 配列を使うことによるメリットとデメリットを列挙出来る?
607 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:37:55 ] 出来る
608 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:04:50 ] 居座ってる人が何をしたいのか分らん
609 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:21:29 ] 出来るがしない
610 名前:デフォルトの名無しさん [2009/11/10(火) 15:58:42 ] >>595 だから何つっちゃうよ? プログラム中に何万だかあるシンボルを同一空間に置けつったんだろ >>560 はよ、でそれを俺はつまんねつったわけ つーか、#define から enum へもう流れが変わってるんだが、まだ翻訳フェーズ(4)にこだわりたがるのは何でだ? 255歩譲って、翻訳フェーズ(4)の話に戻っても、翻訳環境の負荷を軽くって定量的にどのくらいやるべきだと思っている? それは配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか? そのうえでだが、それは配列の存在意義を聞かれたときの答えとして妥当だと思うか?
611 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:26:11 ] オタクがきれた^^
612 名前:デフォルトの名無しさん [2009/11/10(火) 16:48:25 ] C言語の勉強をしたいのですが、関係した資格はなんですか? 情報処理2種ですか?
613 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:52:27 ] 今は情報処理2種っていう資格は名前が変更になって C言語以外もいろいろ選択できるようになってるけど それでいいんじゃないでしょうか。
614 名前:デフォルトの名無しさん [2009/11/10(火) 16:58:30 ] ニコニコ動画で2009年10月15日に投稿された「【プログラミング】テトリスを1時間強で作って みた【実況解説】」という動画が人気を集めている(写真1)。公開されてから2週間ちょっとで 15万回以上も再生され,コメントも数多く寄せられている。 内容は,開発ツールのインストールからスタートしてWindows環境でC言語を使い,わずか1時間強 でテトリスを完成させるというもの。そのあざやかな手腕には,感嘆の声がコメントで寄せら れている。プログラミングそのものがエンタテインメントになっており,1時間強見ていても全く 飽きることがない。 ニコニコ動画で「うp主」と呼ばれる動画投稿者はどんなプログラマなのだろうか?と思い,インタ ビューを申し込んでみた。うp主の名前は,紀平拓男さん。東京・南青山で携帯電話向けのソフト ウエア開発会社ブロードテイルを経営する若きプログラマCEO(最高経営責任者)だ。きっとプログラ ミング初心者の参考になる話を聞けるに違いない,と期待しながらインタビューを始めたが,予想以上に “すごい”紀平さんのプログラミング歴に圧倒される結果となった。 ──1時間強でテトリスを作れるのはすごいですね。プログラミング歴を教えてください。 幼稚園のころからですね。当時,セガが「SC-3000」というパソコンを出していて,これが家にあり ました。あるとき,親が「ベーマガDX」(注:電波新聞社が発行していたプログラミング雑誌「マイコン BASICマガジン」の別冊。様々なパソコン用のゲーム・プログラムなどを掲載していた)を買ってきた ので,そこに載っているプログラムを打ち込んでいました。 当時は「これを打ち込むとゲームができる」という認識しかなかったですが。SC-3000には顔のキャラ クタがあってそれをBASICのPRINT文で表示して親に自慢げに見せていたそうです。 テトリスを1時間強で作ってみた(ニコニコ動画) www.nicovideo.jp/watch/sm8517855 itpro.nikkeibp.co.jp/article/Interview/20091104/340019/
615 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:03:36 ] ニコ厨ってだけでちょっとね
616 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:07:52 ] あえてまれによくあると表現したのはTMPだとよくあるけどTMPを駆使するのはまれだから。
617 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:09:33 ] >>610 おお、どうしたんだい? そもそもの、プログラム中に何万だかあるシンボルが同一空間にないという仮定を持ち出してはならんぞ。
618 名前:デフォルトの名無しさん [2009/11/10(火) 17:29:06 ] >>617 なんだそりゃ どっから出てきた? 配列を使うからか? 違うね、配列を使うにしても分割のしようはあるが おまえさん翻訳フェーズ(4)にご執心なんだっけ #undef という手はあるが、前述のとおり俺は興味ない 面白そうな話でも出てくれば別だが今んとこ否定する
619 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:49:59 ] >>618 ちがうちがう。 配列にする前の、数万だか数十万だかの変数が、同一空間にある可能性を元の話題で否定していないのよ。
620 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:51:27 ] ちなみに>>599 も俺で、 > 配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか? もちろんない。
621 名前:デフォルトの名無しさん [2009/11/10(火) 18:25:11 ] >>619 元々が同一空間にぶちまけられた瓦礫の山でも何とかするのが俺らの仕事 そこで配列の出番かどうかが、この流れでの論点だったはずだが、違うかい?
622 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 18:27:16 ] テトリスくらいできるよ馬鹿野郎
623 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 18:33:01 ] 1時間でコールオブデューティー4を作る…とかだったら。
624 名前:デフォルトの名無しさん [2009/11/10(火) 18:53:39 ] むかーし、PC ショップであたかも即興でマシン語たたいて得意がってたのがいたが 何のことはない暗記してきたコードを再生していたに過ぎない(本人談
625 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:00:51 ] 砂漠が良いか賽のが原が良いかってことだったらどちらも かなり困ったもの。程度問題。メリット、デメリットのバランス で決めるべき問題だろ
626 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:01:29 ] むかーし、pcショップで文字列を繰り返し表示させて画面を埋めるプログラムを書いたら、 ちょっと目をはなした隙に画面中央にその文字列を色を変えながら表示するプログラムに 書き換えられていたでござる。
627 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:03:02 ] それからも書き換え合戦は行われ、生まれたのがWindowsです。 相手は嫁です。
628 名前:デフォルトの名無しさん [2009/11/10(火) 19:08:54 ] 0 new cls
629 名前:デフォルトの名無しさん [2009/11/10(火) 19:12:31 ] >>626 POKE 文でアトリビュート変えたんだろな
630 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:40:31 ] >>626 実は私が犯人かもしれないw 詰まらないデモが動いてたら今で言う「伝言板スクリーンセーバー」的な プログラムを動かすくらいはよくやってたから。 それも、リストを覗かれないように一行野郎で。
631 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 01:00:13 ] enum number{ one, two, three, four, five, six, seven, nine, zero };
632 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 20:12:09 ] 4の倍数のアドレスにあるintと4の倍数からずれてるアドレスにあるintって計算コストって同じ?
633 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 20:30:10 ] >>632 アドレッシング単位のプロセッサやメモリバスとのミスマッチの 問題は本来はかなり深刻。アドレスによって処理速度がかなり 極端に変わってしまう。 ただPCに限って言えばプロセッサのキャッシュが多層化され、 アドレッシング単位の違いによる相違を吸収されてしまっている 現在あんまし寝た子を起こすような質問をしないこと
634 名前:デフォルトの名無しさん [2009/11/11(水) 21:13:55 ] >>632 境界要求に違反するアクセスの結果を C は言語規則として定めない
635 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:36:29 ] 大抵はコンパイラが良い位置に配置するだろ。 char a, b, c; int d; とやったら c のあとに1バイトの未使用領域作ったり、 d a b c の順にするとか。
636 名前:デフォルトの名無しさん [2009/11/11(水) 21:44:53 ] 自動変数ならレジスタ割付するだろ
637 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:51:54 ] ちんこ
638 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:52:17 ] ほら湧いてきた
639 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:38:15 ] 今思うとハァ?な叱られ 「構造体は必ずビットフィールド使え! メモリは少しでも節約するのが常識だ!」 「mallocを無駄がないように確保しろ!」
640 名前:デフォルトの名無しさん [2009/11/11(水) 22:40:55 ] unsigned int *uint; と宣言したものを、 *(long int *)uint; とキャストするとuintは何になるのですか。 long int **uintですか。 int int32; (int *)int32; とか、何になるのかよくわからないのですが。
641 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:50:17 ] long int だろ。
642 名前:デフォルトの名無しさん [2009/11/11(水) 22:50:21 ] 叱っている側としては 「ビットフィールド、ビット演算とは実体が何かよく理解して使え」 「詳細に着手する前にシステム全体のキャパシティとストラテジを把握しておけ」 「malloc の計算間違いは以ての外、超最低なので絶対にやるなよ」 といっているつもりなんだが、この原発信が 昼下がりに心がすでにアフター5な「ニュータイプ」たちの脳内で どんな減衰劣化を受けているかは、近頃なかなか驚きゃせん だからスパイラルを何回回れるかで道はまだあったりする 甘くも苦くもね
643 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:56:23 ] そもそも言われた言葉の意味を理解していないからな
644 名前:632 mailto:sage [2009/11/11(水) 23:01:33 ] レスd ホンとはだめだけどPCなら気にスンナってことか
645 名前:デフォルトの名無しさん [2009/11/11(水) 23:17:45 ] いや、恐いよ 平然とビットズレを一切何の警告もなくやってのけたり 例外をつかまえるのにシステムコールが必要だったり
646 名前:デフォルトの名無しさん [2009/11/11(水) 23:18:23 ] ユーザモードでバッチグーだったコードが特権モードではNGだったりね
647 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 06:25:16 ] プログラマが完璧に制御できてると思ってるmallocは、OSがテキトーに確保してプロセスに渡してるだけ 本当にそれだけ確保したか分からないし中の挙動も分かってない でなきゃフラグメントなんか起こり得ない
648 名前:デフォルトの名無しさん [2009/11/12(木) 07:13:04 ] そのへんは「情報隠蔽」の理念に乗れる人と乗れない人の差だね 別に C++ でなくとも C でもやっぱり解ってなきゃいかん