1 名前:デフォルトの名無しさん mailto:sage [03/11/09 15:37] いろんなスレが乱立していますが、統合的なスレッドがないので立てました。 質問もOK 関連スレ C#って死滅する理由がないよね! Part4 pc2.2ch.net/test/read.cgi/tech/1042464104/ C#最強伝説 pc2.2ch.net/test/read.cgi/tech/1061208152/ C#とJava、どっちをおぼえればいいの? pc2.2ch.net/test/read.cgi/tech/1006715468/ C#Builder Professional 質問箱 pc2.2ch.net/test/read.cgi/tech/1062433418/ 関連リンク dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/
320 名前:デフォルトの名無しさん mailto:sage [05/02/09 23:50:30 ] >>318 難しいことやってるんだね、学生さん。 おいらにはよく分からないけど...。 www.mech.tohoku-gakuin.ac.jp/nken/java/new2/simpson.html にjavaだけれどコードがのってますよ。 良かったら参考にしてみたら。
321 名前:デフォルトの名無しさん mailto:sage [05/02/09 23:57:32 ] >>320 thx SSEつかって高速化図ってみます、、
322 名前:デフォルトの名無しさん mailto:sage [05/02/11 00:36:27 ] C言語のバージョン教えてと言われた。 どうやって知ればいいんだろうか。
323 名前:デフォルトの名無しさん mailto:sage [05/02/11 00:41:21 ] sにcharを足すstrcatってないの?
324 名前:デフォルトの名無しさん mailto:sage [05/02/11 00:42:42 ] >>322 seclan.dll.jp/c99d/c99d02.htm#dt19990412 の__STDC_VERSION__
325 名前:デフォルトの名無しさん mailto:sage [05/02/11 01:14:37 ] >>323 ありませんよ。 Cで一般的に言われる文字列というものは、最後がヌル文字'\0'で終わることを前提 としています。提供されるシステム関数strcat()などもそうです。 一文字のcharはそういった関数で使用することはできません。 char dest[100]; char src1[] = "abc"; char src2 = 'x'; int len; len = strlen(strcpy(dest, src1)); dest[len] = src2; dest[len + 1] = '\0'; こんな感じですかね。もっとアクロバット的な方法もあるんでしょうが...。
326 名前:デフォルトの名無しさん mailto:sage [05/02/11 01:49:10 ] int n = c; strcat(s, &n);
327 名前:デフォルトの名無しさん mailto:sage [05/02/11 02:14:49 ] >>326 関数内の自動変数の場合、 int n の場合、cを代入した次のバイトがNULLである保証はありませんよ。
328 名前:デフォルトの名無しさん mailto:sage [05/02/11 02:16:47 ] 補足。 CPUのアーキテクチャによって異なります。 言語としてそういったことに依存すべきではないと言いたかったのです。
329 名前:デフォルトの名無しさん mailto:sage [05/02/11 02:50:54 ] >>327 ん? cは1バイトだから他の3バイトは当然0になるでしょう。 しかしこれは endianによっては右に詰まってだめだと思うので >>328 は正しいと 思うけど。 ちなみにこんなのはどう? sprintf(s, "%s%c", s, c);
330 名前:デフォルトの名無しさん mailto:sage [05/02/11 06:51:06 ] >>329 未定義 >>326 char s2[] = {c, '\0'}; strcat(s, s2);でいいじゃん。 C99ならstrcat(s, (char []){c, '\0'});って書ける筈だけど。
331 名前:デフォルトの名無しさん mailto:sage [05/02/11 10:17:54 ] 私はこんな幹事かな。 sprintf(strchr(str, '\0'), "%c", ch); 或いはこう。 char * p = str + strlen(str); p[0] = ch; p[1] = '\0';
332 名前:デフォルトの名無しさん [05/02/27 16:56:10 ] すみません、妙な質問で恐縮ですが、どなたか教えてください。 sprintf() の s ってどういう意味ですか?f は format の意味だと思うのですが。
333 名前:デフォルトの名無しさん mailto:sage [05/02/27 16:59:08 ] stringじゃない?
334 名前:デフォルトの名無しさん mailto:sage [05/02/27 17:01:38 ] sはsecond。fはfirst
335 名前:デフォルトの名無しさん mailto:sage [05/02/27 18:04:22 ] string ですか。ありがとうございました。 scond ですか(ry
336 名前:デフォルトの名無しさん mailto:sage [05/02/28 12:51:53 ] >>332 printf()「系」とかssanf()「系」とか言う言葉があるよ。 先頭の's'はstring、'f'は自分でオープンしたファイル、付かないものは対象がstdinか stdout。結構系統立てられているんですよ。
337 名前:336 mailto:sage [05/02/28 12:53:07 ] メンゴです。 一行目のssanf()はscanf()でした。
338 名前:デフォルトの名無しさん mailto:sage [05/02/28 14:16:48 ] >>336 さらにva_listを引数に取るvprintf/vscanfも有る。当然fとsも有る。 vscanf系はC99で追加されたものだけど。
339 名前:デフォルトの名無しさん mailto:sage [05/02/28 18:51:54 ] springfというのもある
340 名前:デフォルトの名無しさん mailto:sage [05/02/28 22:45:28 ] さらに最新最強はsnprintf。 渡したchar *のサイズを2つ目の引数で指定でき、 そのサイズを超えて書かないことが保障されているのでやや安全。
341 名前:デフォルトの名無しさん mailto:sage [05/03/02 16:40:40 ] アドレスに関する質問。 型は不明で、要素一つのサイズは分かってる場合。 次の要素にアクセスする方法を教えて下さい。 または次の要素へのアドレスを取得する方法。
342 名前:342 mailto:sage [05/03/02 16:42:50 ] サイズがBYTEだってことに気づかなかった....。 解決しました。
343 名前:デフォルトの名無しさん mailto:sage [05/03/09 14:33:38 ] POINT point[3] = { {0,0} , {1,0} , {0,1} }; っていう初期化はできるんですが point[3] = { {0,0} , {1,0} , {0,1} } という風に値を入れることが出来ません 配列全体に値を入れる方法は無いんですか?
344 名前:デフォルトの名無しさん mailto:sage [05/03/09 16:00:29 ] >>343 配列に代入はできません。 精々コピー用の関数を用意するのが関の山です。 要素数が3で固定ならば、構造体にしてしまえば(直値ではありませんが)代入できなくもありません。
345 名前:デフォルトの名無しさん mailto:sage [05/03/09 16:10:27 ] >344 関数でもつくってそれで入力するようにします ありがとうございました。
346 名前:デフォルトの名無しさん mailto:sage [05/03/10 00:43:33 ] Cって、こういうとこアフォだよなあ
347 名前:デフォルトの名無しさん mailto:sage [05/03/10 19:02:05 ] やっぱりRubyがいいね
348 名前:デフォルトの名無しさん mailto:sage [05/03/13 17:13:30 ] cでコンパイルする際に windres: can't open `obj/EK-MAMEko/ui/mame32k.res' No such for directory make: *** [obj/EK-MAMEko/ui/mame32.res] Error 1 こういうエラーが出て困ってるんだけど これってどういう意味かわかる?
349 名前:デフォルトの名無しさん [05/03/13 17:14:00 ] age
350 名前:デフォルトの名無しさん mailto:sage [05/03/13 18:48:41 ] >>347 いや、Rubyは問題外。
351 名前:デフォルトの名無しさん mailto:sage [05/03/17 00:52:33 ] 変数を入れ替えるときに別の変数を用意せず、 X = X ^ Y, Y = X ^ Y, X = X ^ Y; とするのがよくないのはなぜ?
352 名前:デフォルトの名無しさん mailto:sage [05/03/17 00:56:22 ] >>351 数値以外には使えない XとYが同じ変数を指していると上手くいかない
353 名前:351 mailto:sage [05/03/17 01:17:15 ] >>352 なるほど。 これをプリプロッセスでやって構造体なんかを渡しちゃうとマズーだ。 アリガト。
354 名前:デフォルトの名無しさん mailto:sage [2005/03/22(火) 21:55:06 ] new演算子で作ったオブジェクトをdeleteした後に デストラクタでdeleteすると何か問題ありますか?
355 名前:デフォルトの名無しさん mailto:sage [2005/03/22(火) 23:09:33 ] mallocで確保した領域をfreeで開放しますが、 システムはどのようにして、はじめに確保した領域を知ることができるのでしょうか。
356 名前:デフォルトの名無しさん mailto:sage [2005/03/23(水) 01:23:39 ] >>354 deleteしたら、0を入れておけば大丈夫。 >>355 malloc()で戻されたポインタの指すメモリの直前辺りに管理情報を埋めておくのが一般的。
357 名前:デフォルトの名無しさん [2005/04/03(日) 14:07:55 ] 配列同士の数値の比較をしたいのですが、下記のようだとうまくいきません。 どのようにすればよいのでしょうか? for(i=0;i<5;i++) for(j=0; j<5; j++) if(group[i] == group[j] && i != j) count[i]++;
358 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 15:10:03 ] >>357 j = i
359 名前:デフォルトの名無しさん mailto:sage [2005/04/03(日) 15:22:36 ] >>357 配列の同じインデックスを持つ要素同士を比較したいのであれば、単純な(一重の)ループでいい。 つーか、>357では日本語の説明が足りんし、コードがおかしいし、何がしたいのか判らんのだが。
360 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 00:24:27 ] すみません。初歩的な質問をさせていただきます。 char *func1(){ return "a"; } char *func2(){ char *s = "a"; return s; } こんな2つの関数があったとして、これらが関数の呼び出し元に返ってきた際に 戻り値のポインタが正しい場所を指し示すことはどこまで(いつまで)保障できるんでしょうか? func1は保障できる、func2はできる、それとも両方できない/できる、どこまでなのか…等。 また、私の勉強不足のせいで、両者のメモリ上での違いがいまいちはっきりしてません。 一応どちらでも動作するにはするんですが、いつか不正な参照とかで 落ちちゃうんじゃないかと気になって怖くて夜も眠れません。 参考になるサイトを教えていただけるだけでも結構ですのでよろしくお願いします。
361 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 01:05:29 ] 規格ではどうか忘れたけど、たいがいいけるはず。 どうしても心配ならstatic const char ret_str[] = "a";とかすれば? あとchar *じゃなくてconst char *を使え。
362 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 01:08:07 ] >>360 定数(リテラル)の寿命はプログラムの開始から終了まで。 関数内で宣言されたauto変数の寿命は、関数の開始から終了まで。 char *func1(){ return "a"; /* "a" を指すポインタを返している */ } char *func2(){ char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */ return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */ } つまり、どっちも同じ。 リテラルはいつでもどこからでも参照出来るので、戻り値を使ってても大丈夫。
363 名前:360 mailto:sage [2005/04/04(月) 02:05:28 ] >>361-362 ありがとうございます!だいぶスッキリしました。 リテラルに関しては参照先が不正な値になるんじゃないかとかいう 心配は無用なわけですね。逆の場合(変数、関数のポインタ)は気をつけろと。 すみません。あとここからもう一段階お願いします。 実は言うと今、Unix系ソフトの移植作業をやってまして こいつらと同等の動作をするものを作りました。 char *dirname(char *path); char *basename(char *path); basename()はパス名からディレクトリを除いた部分(ファイル名)を返せばいいので 引数のポインタをそのまま使い回してreturn path+pos;のようにして返してます。 dirname()の方は引数で与えられたパス名からファイル名を除いたものを返すものなので、 関数内でdir[MAX_PATH]のように宣言した配列に、引数の文字列からファイル名部分を 除いたものをstrncpyでコピーなどして、最後にdir(先頭アドレス)を戻り値にしてます。 (ちなみにさっきの質問は"."「カレントディレクトリ」を返す場合でした。) 長すぎるのでまとめると、 ・basename()の戻り値は呼び出し先のローカル変数とは無関係である。 ・dirname()の戻り値は呼び出し先のローカル変数に依存している。 この場合だと、dirで確保していたアドレスは戻り先で参照しても安全なのでしょうか? ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。 やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。
364 名前:360 mailto:sage [2005/04/04(月) 02:14:47 ] 何度もすみません。つまりさっき私が言ったdirname()の実装は char *func2(){ char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */ return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */ } この場合と同じと考えていいんでしょうか?ってことですね。 私の目には全く同じものに映るのですが、間違いありませんでしょうか。
365 名前:デフォルトの名無しさん [2005/04/04(月) 02:15:23 ] floatがもてる最大値はどのように調べればよいのでしょうか?
366 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 02:30:48 ] >>363-364 const char *func3(void){ const char s[] = "a"; return s; /* ローカルな配列 s へのポインタを返す */ } const char *p; p = func(); /* 0, func() の s へのポインタを受け取る */ printf("%p\n", p); /* 1, これは構わない */ printf("%s\n", p); /* 2, これは駄目 */ 0 は何ら構わない。戻ってきたアドレスをコピーしているだけ。 1 も何ら構わない。コピーしたアドレスを表示しているだけ。 2 は駄目。アドレスの先を参照してしまっているから。 何故参照してはいけなかというと、アドレスの先にある func3() の s の寿命は、 func3() を抜けた時点で既に尽きてしまっているから。 func2(), func3() は全然違う関数。
367 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 02:35:17 ] >>365 float.h にある FLT_MAX マクロで定義されてる。 #include <stdio.h> #include <float.h> int main(void) { printf("%f\n", FLT_MAX); return 0; }
368 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 02:50:42 ] >364 ダメ。変数の寿命について学んでください。 1.関数の引数を変える。 void dirname(char *dest,int dest_size,const char *path) 2.静的に保持する。使用に若干注意が加わる static char dir[] 3.動的に確保する。呼び出し側に解放義務が発生する char *dir = malloc()
369 名前:デフォルトの名無しさん [2005/04/04(月) 03:05:49 ] >>367 thx limit.hしか知らなかった
370 名前:360 mailto:sage [2005/04/04(月) 03:13:01 ] そのまま貼っちゃいます。今はこんな状態です。 char* dirname(char* path) { int pos = strlen(path)-1; int lastPathSepFoundPos = -1; static dir[MAX_PATH]=""; while(pos >= 0) { if (path[pos] == '/' || path[pos] == '\\') { lastPathSepFoundPos = pos; break; } else pos--; } if (lastPathSepFoundPos == -1) return "."; // current dir else{ strncpy(dir,path,lastPathSepFoundPos); dir[lastPathSepFoundPos] = 0; return dir; } } static dir[MAX_PATH]="";をchar dir[MAX_PATH]にすると →警告「ローカル変数またはテンポラリのアドレスを返します」 となってました。今考えてみれば当然ですよね。。 >>368 どうもです。ちょうど昨日、その2を回避策としてやってみてたとこでした。 その注意というのは関数へのアクセスが同時に起こるような場合でしょうか? 条件コンパイル(#ifdef-#endif)等が面倒になりそうですが、 1の方法が一番簡単そうなので、その方向でやってみることにします。
371 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 03:14:54 ] ↑static char dir[MAX_PATH]="";の間違いです。
372 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 12:12:39 ] strrchr 使えば簡単にみえるな・・・
373 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:49:40 ] すみません最近C++触ったばかしですみませんが class auのコントラクタ関数 au(string s) : enr(s) {}について 文字列をsに代入し enrを生成する時にsを代入すると読めるのですが なぜ au(string s) { enr(s); }とできないんですか? 個人的に関数内容 { }内 は動作命令のみの記述と解釈すれば au(string s) { enr = s; } はenr = s;という動作命令であるから適応であるが { enr(s); }・・・であるから不適と思ってしまうのですが・・ 書いててよくわからなくなってきた・・ au (string s) : enr(s) {}について なぜ : で区切るのかと enr(s)はなぜ{}内に記述してはいけないのかについて詳しくお願いします
374 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 17:09:15 ] >>373 :の後は初期化。{}の中だとメンバ変数への代入になってしまう。 例えば、 class foo { const int bar; foo() : bar(0) {} }; とした場合、この例のように初期化はできるが、 class foo { const int bar; foo() {bar = 0;} }; このような代入はできない。
375 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 17:33:16 ] >>374 全て解決できました。 どうもありがとです
376 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 19:50:11 ] 共用体ってどういうときに使うんですか? また利点とかあるんですか?
377 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 00:05:37 ] すみません。教えてください。 下記のようなプログラムを書くと、結果に必ず0.0が混ざってしまい、困っています。 乱数を3つ表示させたいのですが、0.0を含まないようにするにはどうしたらよいのでしょうか? #include <stdio.h> #include <stdlib.h> #include<time.h> #define N 3 int main(void) { int i,j=0,check; double data[N],dia[N],tmp; srand((unsigned)time(NULL)); printf("\n乱数のつもり:\n"); for (i=1; i<=N; i++) {data[i]=rand()%100+(double)rand()/32768.0;} /* 並替えの計算 */ for (i = 1; i < N - 1; i++) for (j = i + 1; j < N; j++) if (data[j] < data[i]) /* <: 昇順, >: 降順 */ { tmp = data[i]; data[i] = data[j]; data[j] = tmp;}; for (i = 0; i < N; i++) printf("%.1f ", data[i]); /*並替えデータの表示*/ }
378 名前:デフォルトの名無しさん [2005/04/20(水) 00:47:24 ] >>376 それくらい調べろよ。
379 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 01:25:42 ] >>376 メモリの節約 同じメモリブロックを複数の型として解釈したい時
380 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 11:52:18 ] >>377 取り敢えず落ち着け。 深呼吸でもした後、data[] の添え字の範囲が 0〜N-1 だと言うことを思い出せ。
381 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 13:25:48 ] >>376 通信などで、整数型や実数型をバイト列と相互変換したい場合、 ポートアクセスなどでビットフィールドとバイト列を相互変換したい場合などに使う。 メリットは、他の方法に較べて簡便に書けること。 デメリットとしてよく言われる非互換性については、元々汎用的でないコードを書く場合には無視できる。 #勿論、それ相応のコメントは必要。
382 名前:デフォルトの名無しさん [2005/04/23(土) 00:09:57 ] C、C++ある程度覚えるまで、どのくらい掛かった?今から、勉強しようと思うのですが、C→C++→C#か、Javaって感じに逝こうかと思うのですが、C++から移行した人、する人は、C#か、Javaどっち盗ります?←煮たスレあるけどノリで…ゴメソ
383 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 00:19:39 ] >>382 無意味なアンケートするな。
384 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:31:57 ] 無意味っていいよね。 まぁ答えてやんなよ。発想の無い、IT土方プログラマーの行く末までを……ハァー
385 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 12:04:48 ] なんでこう勉強する前にウダウダ人に聞くやつが多いんだろう
386 名前:デフォルトの名無しさん [2005/04/23(土) 12:20:20 ] >何でこう勉強する前にウダウダ人にきく奴が、多いのだろう って、自分も聞いてるじゃんWWW プギャー、と云ってみたくなる。まあ、オイラは聞かなかった、お陰でプログラマーなんかになってしまった訳だが…ハァー
387 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 12:23:43 ] ageんなやボケがあああああ、と自分に云ってみるテst すまんです
388 名前:デフォルトの名無しさん [2005/04/26(火) 11:13:11 ] ∧_∧ ( ´∀`) < ぬるぽ
389 名前:デフォルトの名無しさん [2005/04/27(水) 10:54:11 ] 1+2+3+・・・+N を計算する関数を作成せよ。
390 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 11:48:18 ] >>389 int f(int N){return((1+N)*N/2);}
391 名前:デフォルトの名無しさん [2005/04/27(水) 11:57:21 ] 1/2/3/・・・/N を計算する関数を作成せよ。
392 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 12:05:48 ] >>391 int f(int N){return0;}
393 名前:デフォルトの名無しさん [2005/04/27(水) 12:45:24 ] >>390 感動した >>392 ワロタ
394 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 04:36:53 ] >>391 double f(int N){double x=1.0;if(N>1)while(N)x*=(double)N--;return 1.0/x;}
395 名前:394 mailto:sage [2005/04/28(木) 04:42:40 ] あんま変わらんけど、こっちの方が良かったかな…? double f(int N){double x;for(x=1.0;N>1;N--)x*=(double)N;return 1.0/x;}
396 名前:デフォルトの名無しさん [2005/05/04(水) 18:36:51 ] ttp://ex10.2ch.net/test/read.cgi/news4vip/1115125763/18 ↑exitするならfcloseもfreeもしなくていいんだけど  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ってあるんですが、そうなんですか? ファイルディスクリプタはプログラム終了時に閉じられるとしても メモリリークっすよねコレ
397 名前:デフォルトの名無しさん [2005/05/04(水) 19:00:23 ] >>28 ガッ
398 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 19:58:54 ] >>396 大丈夫。真っ当なOSならアプリケーション終了時にきちんと開放する。
399 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 20:06:09 ] >真っ当なOSなら
400 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:08:18 ] OSが真っ当かどうかに関わらず真っ当な規格合致処理系なら、 exit()を呼んでいなくてもmain()からreturnすればファイルは閉じられる。 main()でのreturnはexit()の呼び出しと等価とも書かれている。(他の関数からmain()を呼んだ場合は別だが) しかしfree()の方にはそのような記述は見当たらない。 (free()を呼ばないで終了するとどうなるかということは書いていない)
401 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:14:15 ] >>400 >(free()を呼ばないで終了するとどうなるかということは書いていない) free() を読んで終了すればどうなるかということも書いていないけどな。
402 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:23:14 ] またこの話題か 好きにすれ
403 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:31:48 ] gotoを使うのは不味いのでしょうか? どなたかおすえてください
404 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:57:09 ] Cで質問です。 変数nの値が??のとき、filename??という名前のファイルを開きたい という場合に、fopenの第1引数にはどのように記述すればよいでしょうか? 先にsprintfを使えばできるようですが 直接引数の部分に記述して何とかする方法がないかと思いまして。
405 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 23:19:00 ] >>404 char *filename(int n) { static char buf[100]; sprintf(buf, "filename%d", n); return buf; } fopen(filename(n), ... )
406 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 23:26:43 ] >>405 なるほど!その手がありましたか! おめでとうございます!ありがとうございます! (ノ´Д`)ノ 彡┻┻
407 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 19:22:25 ] 次にこんなことをしてハマると見た。 rename( filename(1), filename(2) ); // filename.1 を filename.2 にバックアップ
408 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 23:19:39 ] >fopenの第1引数 そもそもパスとか編集しなくていいのか? 素直に >先にsprintfを使え
409 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 23:28:04 ] そこでC++ですよ。 std::string filename(int n) {return "filename" + boost::lexcal_cast<std::string>(n);}
410 名前:デフォルトの名無しさん [2005/05/09(月) 09:50:14 ] C言語をはじめたばかりであまりわからないのですが、 ビットシフトはなんの役に立つのでしょうか?
411 名前:デフォルトの名無しさん [2005/05/09(月) 09:51:19 ] p6222ed.kyotac00.ap.so-net.ne.jp/ うはっwwwwwwwwwwwwwww っうぇwwwwww っうぇうぇwww wおkwwwwうはっwww おkwww っwwwwww うぇwww
412 名前:デフォルトの名無しさん [2005/05/09(月) 10:07:08 ] ttp://EAOcf-526p83.ppp15.odn.ne.jp/ おkwwwwwwwwwwwwおkうぇおkwwwwww うはっwwwwwwwwwwwwwwwwwwwwwwwwwwwww うはっうはっwwwwwwwwwwwwwww wwwwwwwwwwwwっっうぇうぇ うはっ
413 名前:デフォルトの名無しさん [2005/05/09(月) 10:14:46 ] pdf791d.tokynt01.ap.so-net.ne.jp/ wwwおkwwwwwwうぇwwwwwwwwwっうぇ w おkwwwっうぇうはっwwwwうぇwww wっうぇうはっwwwwwwwwwwwwwwwwww
414 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 16:35:01 ] >>410 ビットシフトしたいときに役に立つ
415 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 18:01:05 ] あと、2進数の桁をずらしたいときにも役に立つね。
416 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 18:29:55 ] >>410 任意の上位Nビットを取り出したいとかその逆をしたいときとかに。 DWORD dw = 0x12345678; WORD wHigh = dw >> 16; // 0x1234 WORD wLow = dw & 0xffff // 0x5678 DWORD dw2 = dw << 16 | wLow // 0x12345678
417 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 18:16:54 ] <質問> ピクチャポックに表示した画像をマウスドラッグで範囲選択します。 その選択範囲をマウスのドラッグ中、リアルタイムに枠線で囲みたいのですが どういう処理が一般的でしょうか? DrawLineで線を書いたり消したりとかは、おかしいですよね?
418 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 18:53:11 ] >>417 >>1-10 を見ろ。 回答が欲しければ Windows 系のスレに行くんだな。
419 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 20:15:27 ] XOR
420 名前:417 mailto:sage [2005/05/11(水) 23:15:27 ] すまそん。 他で聞いてきます・・・。(・・`)
421 名前:417 mailto:sage [2005/05/12(木) 00:23:25 ] >419 もしかして、私へのヒント? そうだったら、ありがとうございます。 ビット反転させたらいいのかなー。 とりあえず、C#の過去ログ見てます。
422 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 10:11:02 ] int main(void) { double i; for(i=1.0; (int)i<=9; i=i+0.1) { printf("%d", (int)i); printf("%lf ", i); } return 0; } iが5.000000のとき(int)iがなぜ4になるのか分かりません。 小数部を切り捨てて5になると思うのですが。
423 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 11:35:49 ] >>422 誤差の累積。誤差について調べられたし。
424 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:14:34 ] >>417 まさしくそれ向けの関数がMFCにあった気がする。
425 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:21:49 ] MFCつーか、、、APIであるけど 今はもうXORの時代じゃないのかもなあ
426 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:26:18 ] いちおー書いておくか APIなら DrawForcusRect MFCだと CDC::DrawForcusRect それよりも、CRectTracker クラス使ったほうがいいかも
427 名前:426 mailto:sage [2005/05/13(金) 16:39:17 ] ってここC#のスレだった・・・ スレタイで半角#使ったのか・・・
428 名前:デフォルトの名無しさん mailto:sage [2005/05/14(土) 07:08:29 ] >>427 気にするな ごみスレだ
429 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 09:16:29 ] LSI C-86でコンパイルしてるんですが unknown dimensionっていうエラーは どんな間違いをしてる可能性があるんですか?
430 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 09:45:41 ] >>429 >どんな間違いをしてる コンパイラの選択。 まぁ、恐らくは二重以上の配列で、要素数の指定が漏れているんだろうけど。 int func(int a[][]); とかね。
431 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 10:21:35 ] 二次元と表現せずに二重と表現するのが Cらしいなw
432 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 16:40:43 ] クラス継承で教えて class AandB : public A , public B { } というのを作ろうとしたら Aのメンバー関数で A::data() Bのメンバー変数で char * B;;data と名前が衝突していた. B::dataのみにアクセスするにはどうすればいいの?
433 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 17:26:48 ] >>432 B::dataでダメなら、using
434 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 21:16:22 ] うまくいった class AandB : public A , public B { AandB(){ this -> B::data } } でアクセスできた もうひとつ疑問が class AandB : public A , public B { class B *pB; AandB(): pB(&B) { } } pBにポインターの値を代入したいんだけどできない
435 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 22:17:22 ] >>434 class AandB : public A , public B { class B *pB; AandB(): pB(static_cast<B *>(this)) { } }; キャストは要らないが一応書いておいた。
436 名前:デフォルトの名無しさん [2005/07/10(日) 11:50:07 ] namespace your { struct girlfriend { void lips(); }; } namespace my { struct girlfriend { static void lips(); }; class wife : your::girlfriend { public: void kiss() { girlfriend::lips(); } }; } さて、wife::kiss() するとgirlfriend::lips()によって 奪われるのは基底クラスの your::girlfriend::lips() か、 はたまた同じnamespaceにある my::girlfriend::lips() なのか? VC7, gcc3.1 では基底クラス your:girlfriend::lips() で、 BCC564では 名前空間を優先して my::girlfriend::lips() でした。 どっちがせーかいでしょう? 雰囲気からして基底クラスを採るのがスジっぽいけど。
437 名前:デフォルトの名無しさん [2005/07/10(日) 14:17:24 ] みなさん、コンパイラなどする時はコマンドプロントからやっていますか? それとも編集もまとめて出来るフリーツールなど使ってらっしゃいますか? まだプログラミング始めたばかりなんですが、コマンドプロントの方法もやはり覚えといた方がいいんですかね?
438 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 14:31:47 ] プログラムを学習する目的が限定されていて、コマンドプロンプトを使わなくて済むなら、 覚える必要はない。 授業でどうしてもやらなきゃいけないとか。 プログラミング全般に詳しくなりたいなら、覚えておいた方がいい。
439 名前:デフォルトの名無しさん [2005/07/10(日) 19:03:07 ] 学習目的でプログラムを組む際、教科書によってはコマンドプロンプトを前提としているものがある。 だから、教科書しだいかな。 個人的には、ツールを組み合わせることが楽なので、覚えるといいとおもう。
440 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 20:20:05 ] 簡単な、初級プログラムというのはどうしても、コマンドラインを使った処理、 入出力になるからな。憶えるべきというか、憶えないと学習効率が悪いと思うぞ。 世の中に出ている初級者用のC言語情報なんて、ほとんどがコマンドラインを 前提としているからな。
441 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:20:27 ] やはりそうですか 分かりました、ありがとうございました。
442 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 23:02:56 ] IDEかmakeかって話だろ。 そんなの当面どうだっていいだろ。
443 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 19:15:31 ] 質問 int a = 1; if ( a == (int)0) { ... } のように、キャストした方がいいの?
444 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 21:53:36 ] いらない
445 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 22:06:14 ] >>443 ただの整数は元からint型。
446 名前:デフォルトの名無しさん mailto:sage [2005/07/20(水) 17:02:19 ] この速度ならぬるぽ
447 名前:デフォルトの名無しさん [2005/08/09(火) 01:41:05 ] Cを使った開発で質問させて頂きたいのですが ありがちなDBを使った業務システムを開発するときに MFCと.netフレームワークを比べると どちらの開発効率が上でしょうか。 漠然とした質問ですが 主観等々で構いませんので、ご意見いただけますでしょうか。
448 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:59:47 ] MFCも.netもCじゃなくC++だが。
449 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 02:00:46 ] ありがちなDBを使った業務システムは開発効率より優先する ものがあるんでねぇ? oo4o+vbに1票
450 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 09:50:43 ] スレ違いだったらすみません。 自分用にデバグしやすいmalloc/realloc/freeを実装してみようと 思っていますが何を参考にすればいいかわかりません。 シンプルで小さい実装のソースがあったらURLを教えて下さい。
451 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 11:50:46 ] void *my_malloc(size_t size) { void *p = malloc(size); ...hoge ...fuga return p; } みたいのじゃだめなのか。 メモリアロケーションを実装するのは大変だと思うが。
452 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 13:21:22 ] #define malloc my_malloc
453 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 14:20:45 ] すみません、質問が悪かったですね。 端的に、mmap を実装してみたいんです。 ある組込の環境で、malloc がかなり遅い 環境があるんですが、自分で実装してみたら それを速くできるのか、それとも自分だともっと 遅くなってしまうのか、興味があったのです。
454 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 16:08:50 ] mmapの実装って環境依存じゃないだろうか。ソースならunix系オープンソースosのを 見ればいいだろうけど、参考にはならないような。それはそのままハードorOSの性能 くさいし。欲しいのは多分メモリプールだろうからやるとしてもmallocをラップして プールするのがいいんじゃないかと。 おもろい文章 www-6.ibm.com/jp/developerworks/linux/041217/j_l-memory.html
455 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 19:51:06 ] >>453 www.uclibc.org/ あたりの実装は参考になるんじゃないかな。 MMUあり、無しの両方に対応する実装がある。
456 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 12:17:32 ] あるファイルが存在するかどうかを確認するにはどうしたらよいのでしょうか? 出来るだけ環境に依存しない方法がよいのですが
457 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 13:06:53 ] >>456 環境依存しないと言うことなら、存在する≒読めるということで fopen(targetFile, "r")が成功するかどうかで判断するのが無難。 まぁ、大抵の環境でaccess()かstat()はあると思うがな。 #某環境では、access()がfopen()で実装されているのは内緒。
458 名前:デフォルトの名無しさん mailto:sage [2005/08/18(木) 12:41:09 ] K&Rにmalloc/freeの実装が乗ってる。
459 名前:デフォルトの名無しさん mailto:sage [2005/08/19(金) 23:34:15 ] C言語一通り学んだらDirextXとWINAPIどっちやればいい?
460 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 00:28:38 ] >>459 C++ 特にDirectXをやるのなら絶対。WinAPIをやるのでもなるべく。 そもそもDirectXはライブラリなどで隠されていない限りある程度WinAPIで下準備が要るから、 結局WinAPIの知識が要る。
461 名前:デフォルトの名無しさん [2005/08/31(水) 11:32:56 ] a, bが変数だとして(…の中で変更される可能性あり)、 (1) if (a == b) { while(a == b) { … } // ★ } と (2) if (a == b) { do { … } while (a == b) ; // ★ } は同じ意味ですか? 今(1)のコードで★部分にコードを追加したいので、 (2)に変えても問題ないか知りたいです。
462 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:34:53 ] while(a == b) { … } if (a == b) { // ★ } のほうがまだ読みやすくない・・・?
463 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:39:19 ] >>461 同じだと思う。 >>462 それは意味が変わってる。
464 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 12:01:38 ] >>461 積極的に(2)に変えたい理由は? 別に(1)のままでもいいと思うのだけど。
465 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 14:03:12 ] 最初に一回無駄な比較が増える
466 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 14:12:57 ] >>462 >461 (…の中で変更される可能性あり)
467 名前: ◆cFJoQcQH2U mailto:sage [2005/08/31(水) 14:16:11 ] 「神戸 330 ふ 1234 この車はどうのこうの(箇条書き)」 sscanfで、上のような文字列を読み取るのに、 "%s %d %s %d %s"を使っているのですが、最後の備考欄に 空白文字が入っているとすべてが読み取れません。 「残りすべての文字列」というマークはありますか? WinXp,VS.netです。
468 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 15:15:43 ] >「残りすべての文字列」というマークはありますか? そんなものは無い。 fgetsで行末まで読んで、読んだ文字列を変換するのが良い
469 名前: ◆cFJoQcQH2U mailto:sage [2005/08/31(水) 15:25:43 ] そうですか・・・ありがとうございます。 fgetsで読んで、4つ目の改行文字以降を読み取ることにします。
470 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 15:28:51 ] "%s %d %s %d %[\x01-\xff]"
471 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:45:00 ] 条件演算子の? : は右結合ということですが、 a() { printf("a\n"); return 0; } b() { printf("b\n"); return 0; } c() { printf("c\n"); return 0; } d() { printf("d\n"); return 0; } e() { printf("e\n"); return 0; } f() { printf("f\n"); return 0; } g() { printf("g\n"); return 0; } main() { a() ? b() ? c() : d() : e() ? f() : g(); } とした場合、結果が a e g となりました。 ? : の右結合とは、どの部分に掛かってるんでしょうか?
472 名前:デフォルトの名無しさん [2005/08/31(水) 21:46:37 ] ↑結果を見ると左結合に見える、ということです。
473 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:52:57 ] >461 なぜ(2)の形にしたいのかがわからない。 必ず一回余分な判定が入るのが嫌程度なら(1)の書き方をお勧めする。 上から下への流れで読みやすい。 (2)だとループ条件がループの終わりにならないと分からないので 一部の人間からは嫌われてたりする。 自分は(1)はだね。
474 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:55:04 ] 参考に void loopfunc(void) { clock_t s[2], e[2], t[2]; int i, j;int a, b; s[0] = clock(); for(j=0;j<100000000;j++){ a = 4568992; b = -5621984; if(a==b){ while(a==b){ a %= b; a *= b; } b %= a; } e[0] = clock(); t[0] = e[0] - s[0]; s[1] = clock(); for(j=0;j<100000000;j++){ a = 4568992;b = -5621984; if(a==b){ do{ a %= b; a *= b; }while(a==b); b %= a; } e[1] = clock(); t[1] = e[1] - s[1]; printf("t[0] = %d\nt[1] = %d\n", t[0], t[1]); }
475 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:08:54 ] >>474 if(a==b)の括弧が閉じてないので修正しましたが、 うちの環境では t[0] = 2593 t[1] = 2384 (2)が速いみたいですね。
476 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:10:32 ] >>471 C言語の有名なバグです。 条件演算子の仕様的にも左結合で合ってます。
477 名前:デフォルトの名無しさん [2005/08/31(水) 22:16:06 ] >>476 違うよー 1?2?3:4:5 と書けるのは右結合だから。(結果は3) >>471 結合規則と評価順序は関係ないよ。
478 名前:デフォルトの名無しさん [2005/08/31(水) 22:18:25 ] つまり右結合の掛かる場所は、括弧で括ると 1?(2?3:4):5 こういうことね。
479 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:21:11 ] >>478 し、知らなかった・・ これでもC言語暦10年なんだが。
480 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:21:11 ] main(argc, argv) int argc; char *argv[]; { ↑↓ main ( int argc, char *argv ) { どうちがうの??
481 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:35:22 ] 上 K&R 下 ANSI 上は古い書き方で、普通は下の書き方を使う。 意味上の差はない。
482 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:37:48 ] と思ったが、よく見ると下のargvがchar*になってやがる。 それ以外は同じ。 あと、戻り値の型もちゃんと明示したほうが良い
483 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:51:47 ] cdeclなら別にどうでもいいよ
484 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:00:31 ] int func(float a) { return sizeof(a); } と int func(a) float a; { return sizeof(a); } では違う結果を返すコンパイラもある。
485 名前:480 mailto:sage [2005/09/01(木) 00:37:29 ] ありがとうございます。 したのargvに[]が無いのは転記漏れでした。申し訳ない。
486 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:38:47 ] なんで? ビット長が違う環境とか?
487 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:44:35 ] >484の後者はfloat aと書いてもdouble aと解釈されるのか。 流石にそこまで古いCは知らないなぁ。
488 名前:デフォルトの名無しさん [2005/10/02(日) 20:41:06 ] 以下の問題を配列を必ず使ってプログラミングしてください。 [課題2] 正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。 1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。 <入力例> Input: 3247 <出力結果> MMMCCXXXXIIIIIII お願いします。
489 名前:デフォルトの名無しさん [2005/10/02(日) 20:56:21 ] 初めて投稿します。 STLのiostreamヘッダを汎用テキストマッピングとして利用したいのです。 stringはtypedefで、std::basic_string<TCHAR>〜としたのですがが、 iostreamはどうすればいいんでしょ? なお、MS-Visual C++ ver 6.0で実験しています。 <ソース> #include <tchar.h> #include <iostream> int _tmain(void){ // この coutとwcoutを一つにまとめたい。 std::cout << _T("Hello C++ World!\n") << std::endl; return 0; } 識者の皆様、ご教授お願いしたいです。
490 名前:デフォルトの名無しさん [2005/10/02(日) 21:00:07 ] 関数化してください。 briefcase.yahoo.co.jp/light_blue_8671 問題はいってます
491 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 21:43:22 ] >>489 coutとかは型ではないからtypedefできない。 だからこうするしかないと思う。cinやcerr、clogも同じ。 #ifdef UNICODE #define tcout std::wcout #else #define tcout std::cout #endif
492 名前:デフォルトの名無しさん [2005/10/02(日) 22:22:03 ] >>491 ご返答ありがとうございます。 なるほど、 cin, cout, cerr, clogはIOストリームオブジェクトなので、 defineで置き換えるしかないですか・・・ ご指摘を参考にしてみます。
493 名前:デフォルトの名無しさん [2005/10/02(日) 22:57:40 ] >>488 (前半) #include "ctype.h" #include "string.h" #include "stdlib.h" #include "stdio.h" // 文字 static char code[4][2]={"I","X","C","M"}; int main(void){ int i, j, max, len, dec[4]; char inpbuf[5];// 4桁 + NULL char outbuf[37];// 9文字 x 4桁 + NULL // 初期化 memset(outbuf, 0, sizeof(outbuf)); memset(inpbuf, 0, sizeof(outbuf)); // 入力 printf("input:"); scanf("%5s", inpbuf);
494 名前:デフォルトの名無しさん [2005/10/02(日) 22:59:11 ] >>488 (中) // 入力チェック len=strlen(inpbuf); for (i=0; i<len; i++){ if (!isdigit(inpbuf[i])){ printf("数値を入力してください\n"); return -1; } } i=atoi(inpbuf); if (i>9999 || i<0){ printf("数値は0-9999までの範囲で入力してください。\n"); return -1; } _itoa(i, inpbuf, 10); len=strlen(inpbuf); // バッファを数値に変換して max=len-1; for (i=max; i >= 0; i--){ dec[i]=inpbuf[i]-48; if (dec[i]!=0) max=len-i-1; }
495 名前:デフォルトの名無しさん [2005/10/02(日) 23:00:56 ] >>488 (後半) // 文字列作成 for (i=0; i <= max; i++){ for (j=0; j < dec[i]; j++) strcat(outbuf, &code[max-i][0]); } // 出力 printf("%s\n", outbuf); return 0; } くどいので、部分部分は修正してね
496 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 00:27:12 ] 質問させてもらいます。 SDL_ttfでの表示の際にUnicode文字列が必要なのですが、 S-JISからUnicodeへの変換にはやっぱりICU使うしか無い でしょうか?
497 名前:デフォルトの名無しさん mailto:age [2005/11/01(火) 00:27:50 ] 質問なのでageさせて貰います。
498 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 00:55:13 ] いいえ
499 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 03:39:10 ] ぽいんた〜がわかりまっせ〜ん おしえてくださ〜い
500 名前:ハーピィ mailto:sage [2005/11/01(火) 05:56:56 ] E・∇・ヨノシ <500ゲット♫
501 名前:496 mailto:sage [2005/11/01(火) 10:13:50 ] 変換するのは大げさなのでデータにUTF-8で埋め込むことにしますた。
502 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 18:29:34 ] >>496 ちなみにマルチバイト文字(char型)にShift-JISが使われていれば、mbstowcsという標準関数が使えなくもない。
503 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:32:17 ] 文字コードについてなのですが・・ a b c d eなどはASCIIコードって事はわかってるのですが "あ"とか"い"とかは何コードなのでしょうか strcpy(str,"あ"); printf("0x%X\n",str[0]); printf("0x%X\n",str[1]); とか調べてみたのですが全然判らなくて・・
504 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:48:32 ] > a b c d eなどはASCIIコードって事はわかってるのですが ここで既に終わっている
505 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:52:52 ] ぇー数値ASCIIの数値を当てはめて出力しても期待される文字が出力されましたが
506 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:55:18 ] >>503 Windows系ならShift-JISでUnix系ならEUC-JP。ほかは知らん。 Cとしては文字コードは一定の基準さえ満たせば何でも良いということになっているから、 特定の文字コードに頼り切ったコードは書くな。
507 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:57:36 ] >>502 すみませんorz ありがとうございました
508 名前:デフォルトの名無しさん [2006/01/08(日) 18:59:22 ] 演算についてなんですけど C言語において被除数=0の時の計算っていうのはまずいですよね? 例えば 0/3 0%7 などです。 うちの処理系では例外処理が加えられて0を返すようになってるみたいなんですけど どうでしょうか
509 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 19:44:30 ] んなこたーない。 もし、本当に例外処理が行なわれているとしたら、その処理系は糞未満だ。
510 名前:デフォルトの名無しさん [2006/01/08(日) 19:58:49 ] >>508 0以外を返すのは数学的にもアーキテクチャから見てもおかしい。
511 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 20:00:12 ] 0 で割る方じゃなくて、0 が割られる方なのな。 >C言語において被除数=0の時の計算っていうのはまずいですよね? なんでまずいって思ったの?いずれも答え 0 で数学的にも正しい結果でしょ? どっちかに負数が入る場合は C89 では処理系定義の部分は入るけど、それでも結果自体は 規定されるから例外処理なんてない。 (C99 では 0 方向に丸めるよう規定されてる) 「5.4 整数除算」を参照の事 ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607
512 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 20:55:50 ] >>509-511 すいません少しこんがらがってました 0が除数である場合の計算でしたorz
513 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 21:38:36 ] >512 手元に C99 の規格書しかないけど、 > 9899:1999 6.5.5/5 >The result of the / operator is the quotient from the division of the first operand by the >second; the result of the % operator is the remainder. In both operations, if the value of >the second operand is zero, the behavior is undefined. ということで未定義動作だから何が起こっても規格準拠だね。
514 名前:デフォルトの名無しさん [2006/01/13(金) 09:35:53 ] こんにちは。質問です。お願いします。 C言語のif文で、条件式の中でfloat型の変数は使えますか? こういう処理なんですが・・・ float fA,fB; : : if(fA != fB) { : } 例えば、for文の条件式とかで浮動少数型の変数を用いるのが 明らかに変なのは分かります。では、if文は、どうなのですか?
515 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 09:56:57 ] >>514 できるけど、やっぱり紙の上での計算と違って誤差が出るから static float tol = 0.0001f; float a,b; if((a-b) < tol) { /***/ } とやるべきだろうね。
516 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:05:56 ] >>515 if ( abs(a-b) < tol ) { /***/ } なのでは?tolの値は妥当などうかも疑義がありますが
517 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:24:44 ] for(double d = 0.0; d < 100.0; d += 0.5) 誤差だけ気にしなければ別に変じゃないな
518 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:40:29 ] 変だよ
519 名前:デフォルトの名無しさん [2006/01/13(金) 15:27:00 ] sin(x)のマクローリン展開から√2の近似を計算するプログラムを作成したいんですが、どなたかご指導ご鞭撻の程お願いします。 sin(π/4)を2倍するところまではわかるんですが、マクローリン展開がどうもよくわからないので
520 名前:514 [2006/01/13(金) 18:21:16 ] 早速の回答を有り難う御座います。 因みに、VC++を使っているのですが、前述の問題に関して Debugモード、或いはReleaseの最適化を外すと 何ら問題が出ないのです・・・ コンパイラのバグなのか、誤差の問題なのか 悩むところです。。
521 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 18:41:40 ] 自分のソースが悪い、に一票
522 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 18:55:29 ] >>520 浮動小数点数は同じ値でありながらビットイメージが違う場合も存在するから、 >516 の方法で丸めた方がいいよ。 tol の値は #include <float.h> して FLT_EPSILON 使えばいい。
523 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 20:30:06 ] 見事にC言語のスレになっててワロタw
524 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:10:14 ] 質問です。 #include<stdio.h> #include<string.h> #define N 32 void sorting(char*,char*); main(int argc,char *argv[]){ char read[N*N],Memory[N][N],CASL[N][N][N]; sorting(CASL,read); } void sorting(char *CASL,char *read){ int i=0,j=0,k=0,z=0,I,J; while(1){ I=i*(N*N);J=j*N; if(*(read+z) == '\0') break; else if(*(read+z) == ' '){ *(CASL+I+J+k) = '\0'; j++;k=0; } else if(*(read+z) == '\n'){ *(CASL+I+J+k) = '\0'; i++;j=0;k=0; } else{ *(CASL+I+J+k) = *(read+z); k++; }z++;}} 上記のプログラムでコンパイルするとwarning: passing arg 1 of `sorting' from incompatible pointer type のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。
525 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:50:26 ] >>524 マルチうぜえ
526 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:50:43 ] >>524 CASL の宣言か、sorting() の引数宣言 (プロトタイプ含む)
527 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 22:23:00 ] floatが整数かどうかの判定ってどうします? if(x - (int)x == 0.0f) で良いの? キャストに頼るのが変な気がするんですが・・・。
528 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:01:34 ] > floatが整数かどうかの判定ってどうします? 移植可能な方法で、判定する方法はない。
529 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:09:40 ] >>528 こら。modfがあるだろ。 ちなみにfloat版はmodff。
530 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:36:58 ] >>529 modf(...) == 0 とするのか? >>527 とたいして変わらんぞ、それ。 浮動小数点に対して == 演算子を使う奴は、大抵バカ であることがまたもや実証されたな...。
531 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:46:27 ] >527だとintの範囲を超えたときに何が起こるかわからんからmodfの方がまし。 そもそも整数かどうかの判定が必要な値にfloatを使っていることがおかしい気がするが。
532 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 09:20:37 ] >>531 整数というか、小数の位が存在するかどうかで処理を変更したかったので。 modfで誤差を考慮しとけば良さそうですね。
533 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 17:17:00 ] >>523 スレタイだけで >>1 を読まない間抜けが多いって事です。
534 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 12:41:38 ] 配列の初期化について質問です。 int test[4] = {10, 100, 50, 1}; などの様に初期化したいのですが、 宣言した後で、このように一気に初期化する方法は無いのでしょうか? 具体的には、配列をクラスのメンバに持っていて、 コンストラクタで初期化したいのですが、 test[0] = 10; test[1] = 100; ・ ・ ・ などのように、一つずつ初期化していくしかないのでしょうか?
535 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 12:52:00 ] >>534 それしかありません。
536 名前:534 mailto:sage [2006/01/24(火) 14:38:34 ] コンストラクタでローカル変数 int l_test[4] = {10, 100, 50, 1}; を作って、それをメンバの配列にmemcpyすることで解決しました。 あまりキレイな解決策ではないですが、 実際は2次元配列で要素が多かったので、どうしても一気に初期化したかったのでした。
537 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 22:06:31 ] > コンストラクタでローカル変数 > int l_test[4] = {10, 100, 50, 1}; > を作って、 まあ、最近のマシンなら気にすることではないのだろうが、 static const をつけておいた方がちと早くなるかもし れない。
538 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 06:19:38 ] 何故vectorかなにかのコンテナを使わないのだろう。
539 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 07:40:22 ] >538 それはさすがにスレ違い。
540 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 17:51:24 ] このスレで「スレ違い」って言われてもな
541 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 16:02:03 ] スレタイに半角の#を入れようとしたのが問題
542 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:59:12 ] >>541 これってCすれじゃなかったのか!!!!
543 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 23:08:23 ] 気付いてない子がいたのか・・・
544 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:17:53 ] for(;;); for(;;) といった文を見たんですがこういう文はどういう働きをするんでしょうか?
545 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:27:06 ] ループ・ザ・インフィニット! ・・・とかって言うとスタンドっぽくね?
546 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:41:02 ] >>544 forの括弧の中の3つのそれぞれの部分は省略できる。 2つのセミコロンの間の継続条件を省略すると無限ループになる。
547 名前:デフォルトの名無しさん [2006/02/03(金) 16:06:33 ] >>546 すいません、ちょっと言葉足らずでした。 for(初期条件;終了条件;加算); for(初期条件;終了条件;加算){ 文; } こんな感じの文だったのですが、 最初のfor文の最後に ; が入った形をみたことがなかったので、 この2個のfor文がどのように動くのかを教えてほしいです。
548 名前:デフォルトの名無しさん [2006/02/03(金) 16:16:08 ] rr
549 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:21:58 ] >>547 ↓こう書いたら解る? for(初期条件;終了条件;加算) ;
550 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:23:07 ] >>549 何もしないんですね。orz 理解できました。ありがとうございます。
551 名前:デフォルトの名無しさん [2006/02/03(金) 21:35:03 ] #include <stdio.h> int main(){ int *pa[500],*pb[500],*pc[500],*pd[500],*pe[500],*pf[500]; int i; for(i-0;i<500;i++){ *pa[i]=5; *pb[i]=5; *pc[i]=5; *pd[i]=5; *pe[i]=5; *pf[i]=5; printf("%d,%d,%d,%d,%d,%d\n",*pa[i],*pb[i],*pc[i],*pd[i],*pe[i],*pf[i]); } return 0; } このプログラムってかなりやばいよな;
552 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 21:35:49 ] >>551 マルチうざい
553 名前:デフォルトの名無しさん [2006/02/04(土) 16:45:57 ] 構造体についての質問です。 #include<stdio.h> struct string{ char *a;}; struct string data[]={ "a","b","c","d",}; int main(){ struct string *p; char *s; int i; scanf("%s",&s); p=data; for(i=0;i<=3;i++){ if(s==(p+i)->a){ printf("%s\n",(p+i)->a);}} return 0; } 以上をコンパイルして実行した場合、scanfで入力した値がa~dのどれかでも if(s==(p+i)->a)が真と判断されないのですが、間違いについての教唆をお願いします。
554 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 16:57:35 ] >>553 >間違いについての教唆をお願いします。 教え唆すのか?
555 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 17:13:29 ] そそのかされてどうする俺… 普通に間違いについて教えてほしいです
556 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 17:23:21 ] たとえば、scanf で "abc" という文字列を読み込んで、 それらの文字一つ一つ( 'a' とか 'b' とか 'c' とか '\0' とか・・・)は メモリの何処に保管されるのさ? 今、値を記憶できる変数の領域は string 構造体のアドレスを保持する p と char のアドレスを保持する s と int の値を保持する i しかないぞ?
557 名前:582 mailto:sage [2006/02/04(土) 18:00:29 ] >>553 よーし、パパそそのかしちゃうぞ。 よくコンパイル通ったな。 構造体のメンバが char へのポインタ1つだけと判っていれば、 構造体配列 = { char*その1, char*その2, ・・・ , char*そのn } なんて初期化が許されるのか ・・・ 知らなかった (マジ ここは、 struct string data[]={ {"a"}, {"b"}, {"c"}, {"d"} }; じゃなきゃ い神埼だと オモテタ。 でも、バグの本質は、>>556 の指摘のとおり。 scanf() で、ポインタ変数にコンソール入力しようとしているが、おまえには特定の char の場所を示すポインタ ( アドレス ) が判るのか? メモリの中身に詳しいヤツ だな。
558 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 18:23:12 ] 本当に唆しているだけだなお前ら。
559 名前:553 mailto:sage [2006/02/04(土) 19:25:32 ] >>556-557 charで*でなく適当な長さの配列を宣言して if()で照会するのは2つの配列[0]に格納した値…ってことですね。 どうみても俺の勉強不足です。本当にありがとうございました
560 名前:デフォルトの名無しさん [2006/02/13(月) 03:43:09 ] 関数を定義するときに void xxx(int yyy) int A; char B; { 〜〜〜 } こんなふうに書かれたものを良く見かけるのですが このときAとBは何か特別なものなんですか?
561 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 08:39:53 ] >>560 void xxx(int yyy) { ...; } ならば、古いスタイルで void xxx(yyy) int yyy; { ...; } となるがそのことだろうか。 それならばプロトタイプ宣言のなかった時代の名残だ。
562 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 10:34:29 ] Borland C Compilerのエラーメッセージについて詳しく解説している 『bcc32_messages』というファイルがあるのですが(中には数百のHTMLが 入っていて、エラーと警告1つ1つに細かい説明が書かれている)、どなたか これの英語版がどこにあるかご存じないでしょうか?
563 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:47:15 ] COMMAND getCommand(char *c) { int i, j, k, l, len; char comtmp[128], fileNametmp[128], comExtmp[128]; COMMAND command; len = strlen(c); for(i=0; i<len+1; i++){ if(c[i] == '-'){ for(j=0; c[i]!='\0'; j++){ i++; if(c[i] == '@'){ comtmp[j] = '\0'; for(k=0; c[i]!='\0'; k++){ i++; /*printf("\nc[%d] = %c\n", i, c[i]);*/ if(c[i] == '>'){ /*printf("\n>>in\n");*/ for(l=0; c[i]!='\0'; l++){ i++; comExtmp[l] = c[i]; printf("\nc[%d] = %c\n", i, c[i]); } }
564 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:48:36 ] if(c[i] == '\0'){ comExtmp[k] = '\0'; command.com = malloc(sizeof(char)*(strlen(comtmp)+1)); command.fileName = malloc(sizeof(char)*(strlen(fileNametmp)+1)); command.comEx = malloc(sizeof(char)*(strlen(comExtmp)+1)); strcpy(command.com, comtmp); strcpy(command.fileName, fileNametmp); strcpy(command.comEx, comExtmp); return command; } fileNametmp[k] = c[i]; } }else if(c[i]!='\0'){ comtmp[j] = c[i]; } } }else if(c[i]=='\0'){ break; }
565 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:52:41 ] } command.com = NULL; command.fileName = NULL; command.comEx = NULL; return command; } 質問です。 このプログラム、-xxxxxx@yyyyyy>zzzzzz (x, y, z は不定) という文字列から command.com = xxxxxx command.fileName = yyyyyy command.comEx = zzzzzzz に文字列を分けて入れるプログラムです。 printfが変なところに3つあるのはデバッグのためなのですが、上から3つ目のprintfをコメントアウトするとバグが起こり、 コメントアウトしないでprintf出力するとバグが起こりません。なぜでしょうか? -insert@123.bmp>rgb と入力した時、fileNameにstrlen()で文字列数を調べたところ、 3番目のprintf()をコメントアウトしなかった場合、7文字と正確に入っていて。 コメントアウトした場合、11文字とでます。 コンパイラーはbccの5.5で、windowsXPを使用しています。 Σ( ゜д゜)うわ プログラム超見づらい。 すみません;;
566 名前:542 mailto:sage [2006/04/22(土) 00:08:46 ] ほら、皆間違えるw
567 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 18:37:12 ] 実行ファイル(***.exe)の作成の仕方がわからないのですが…。
568 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 15:38:33 ] >567 一行目に #!/bin/sh って書いて chmod +x してから、ファイル名に.exeをつけるだけだよ。
569 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 21:47:48 ] 今日はじめてc言語のテキストを買いました。 初心者です。 コンパイル時?に インクルードファイル ’stdio.h’をおーぷんできない とエラーメッセージが出てきました テキスト読んでもわかりません 解決方法があれば教えてください
570 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 22:20:47 ] >>569 きちんとインストールしたか? 特にBorland C++ならbcc32.cfgなど。
571 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 22:41:25 ] >>570 どもです cfgファイルを作ったんですが コンフィグレーションファイル中の オプションの間違い と 難しいですね
572 名前:デフォルトの名無しさん [2006/04/28(金) 07:22:00 ] コンパイルするとstudio.hが見つからないと出るのですが、バグですか?
573 名前:デフォルトの名無しさん [2006/04/28(金) 07:29:26 ] stdio.hだよ。studioじゃない。
574 名前:デフォルトの名無しさん [2006/04/28(金) 11:15:51 ] stdioがスタンダードI/Oだって知らないのかな
575 名前:デフォルトの名無しさん [2006/04/28(金) 17:05:46 ] Cmachineと言うフリーソフト持っている方いませんか? 公開終了してたので・・・orz 持ってる方うpお願いします…
576 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 17:08:37 ] >>575 C のスレと間違うならまだしも、まるっきりスレ違い。 阿呆は帰れ。
577 名前:575 [2006/04/28(金) 17:19:26 ] >>576 書き忘れましたが、C言語のソフトです・・・ あほですいません・・・orz
578 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 21:19:52 ] 初心者で本当にすみません scanf関数を使っていたときに、パラメータに"&"を付け忘れました 俺のPCはあぼーんですか?
579 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 21:30:13 ] >>578 心配なら再起動しろ。
580 名前:578 mailto:sage [2006/04/28(金) 23:13:51 ] >>579 ありがとうございます。 さっき電源落としたんで、後で立ち上げてみます。 授業でscanf習った時に先生に死ぬほど脅されてたんで正直ガクブルです
581 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 00:34:50 ] ワロタ
582 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 01:04:58 ] -|"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" bcc32.cfg コンフィグレーションファイル中の オプション間違い:-|"c:\Borland\Bcc55\include" というエラーが出てしまいます どうすればいいでしょうか? 教えてください。
583 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 02:22:18 ] |とIが区別出来るフォントを使えばいいと思うよ
584 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 12:16:12 ] >>583 ホントですか? 半角入力にですか。 テキストでは |とl の区別がなく書いてあるのでわかりずらいです。
585 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 12:28:03 ] >>583 ありがとうございました |とiの違いですね。
586 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 15:13:16 ] warota
587 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 11:27:23 ] >>580 死ぬほど脅すくらいなら、最初っから教えなきゃいいのになぁ。
588 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 13:47:17 ] LSI C-86 Ver.3.30 試食版のことでお尋ねします、OSはWindows2000です エスケープシーケンスを使いたいと思ってなんとか使えるようにはなりました。 しかし、カーソルを全角用の2文字分の長い方に変えるのはどうやってやったらいいでしょうか
589 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 15:34:00 ] ↑同じ質問を違うスレでしていますが、いろいろ試行錯誤した結果での話です 決してマルチをしようとしたつもりはございません 何なら無視して頂いてもかまいません
590 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 16:20:17 ] それ以前にスレ違いだ。 >>1 を読んでいないことがバレバレだぞ。
591 名前:デフォルトの名無しさん [2006/05/08(月) 16:23:18 ] >>1 よりもスレタイが重要だと思う。
592 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 17:36:16 ] だから間違えたって言ってるだろ
593 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 20:57:59 ] ttp://cgi.2chan.net/up2/src/f137696.txt このコードをCygwinでコンパイルした結果 $ gcc -o client client.c client.c: In function `main': client.c:14: error: storage size of `server_adrs' isn't known とエラー吐かれたのですが、修正方法が分かりません 修正方法教えていただけませんか?
594 名前:593 mailto:sage [2006/05/08(月) 22:09:10 ] すいません、ソースURL間違えてました ttp://namihei.zone.ne.jp/upup/up/56166.txt です、お願いします
595 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 11:45:14 ] >>593 だから激しくスレ違いなんだってばさ。 書き込む前に>1を読むとか直前の数レスを眺めるってこともできないのか? cygwinスレかネットワークスレ辺りで聞いて味噌。
596 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:49:10 ] スペースで区切られた文字列を分割する関数を作ります。 ・連続するスペースはひとつの区切りとしない ・スペースがない場合は全ての文字列を返す ・頭や後ろにつくスペースは無視 ・返す文字列がない場合はNULLを返す ・初期値の文字列はNULLを引数に与えている間に変更されないもとする ・#include<string.h>は使わない ですが、さっぱりわかりません。 どうか教えてください。
597 名前:596 [2006/05/09(火) 20:57:45 ] 引数は( char * , const char * )です。 第1引数は区切られた文字列の格納先 第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定) です。
598 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:59:26 ] 宿題なら宿題のスレッドへ行くが吉。
599 名前:デフォルトの名無しさん [2006/05/10(水) 00:11:15 ] #include <stdio.h> main(){ float x=0.0; double xx=0.0; long i,n=100000; for(i=1;i<=n;i++){ x=x+1/(float)(i*i); xx=xx+1/(double)(i*i); } printf("from 1/1^2 to 1/%d^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x); x=0.0; xx=0,0; for(i=n;i>=1;i--){ x=x+1/(float)(i*i); xx=xx+1/(double)(i*i); } printf("from 1/%d^2 to 1/1^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x); } 1/1^2+1/2^2+・・・+1/100000^2を計算するプログラムを作成せよという問題で、1/1から加えたときと1/100000から加えたときとそれぞれフロートとダブル型の4パーターン 比較する課題なんですが、実行するとバグってしまします。このプログラムのどこおかしいですか?コンパイラはborlandgccです
600 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:16:41 ] >>599 まずおかしいのはスレッドの選び方。ここはC♯のスレッドです。 次におかしいのは日本語。パーターンってなんです? またおかしいのはコミュニケーション能力。バグってしまうだけでは何も通じません。 更におかしいのはコンパイラ。borlandなのかgccなのかはっきりなさい。
601 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:18:13 ] >>600 すげー眠いのでもうだめです。今日はねます。すいませんでした
602 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:18:31 ] >>599 >>595 は見えてますか?
603 名前:デフォルトの名無しさん [2006/05/10(水) 00:23:46 ] ここをC言語のスレとして扱っちゃ駄目なのか? >>599 iが65536以上の時、i*iは32ビットでは表現できないので、オーバーフローしているんだろう。 (double)(i*i)の代わりに(double)i*iとすればいい。
604 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:31:29 ] >>603 動作するようになりましたが、結果がおかしくなりました
605 名前:デフォルトの名無しさん [2006/05/10(水) 00:54:51 ] >>604 ごめん、括弧が要る。 ((double)i*i)
606 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:57:38 ] >>603 >ここをC言語のスレとして扱っちゃ駄目なのか? じゃ、重複スレなわけね。
607 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 01:01:02 ] そういうことになるな。
608 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 13:23:27 ] じゃ削除だね
609 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 15:33:33 ] そういえば3月・4月のスレ削除依頼がまだ処理されてないな。
610 名前:デフォルトの名無しさん [2006/06/03(土) 01:37:14 ] f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める 初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力する方法を教えてください。
611 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 11:03:53 ] >>610 細かな調整は勝手にやれ #include <iostream> using namespace std; double f(double x){ double fx; fx = cos(x) - x*x ; return fx ; } double bisection(double a, double b,double (*)(double),int prc); int main(){ double a,b; double k; cout << " a : " ; cin >> a ; cout << " b : " ; cin >> b ; k = bisection(a,b, f,100); cout<<"cos(x) - x^2 := " << f(k) << " at " << k << endl; return 0; } (2分法は次)
612 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 11:04:35 ] 続き double bisection(double a, double b, double (*func)(double ),int prc){ if (func(a)*func(b) >= 0) return a; //意味ないし a で十分w double up, lo , m; if( func(a) > func(b) ){ up = a; lo = b ;} else { up = b ; lo = a; } double workprod; int workint ; int counter=0; while(1){ m= (up + lo)/2; workprod = func(m); workint = ((int)(workprod * 1000000)); // /100.0; if(workint==0){ cout << "counter value = "<< counter <<endl; return m; } if(workint > 0) up=m; if(workint < 0) lo=m; counter++; if (counter > 20000) break; } return 0.0; }
613 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:55:14 ] >>611-612 1.宿題に答えるのはスレ違い 2.>>1 も読めないカスは失せろ
614 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 23:02:06 ] >>613 1? 笑わせるなヨ ここは元々利用価値のないクズスレ 悔しかったら削除依頼出して来いヤw 612も読めねえクズが
615 名前:デフォルトの名無しさん [2006/06/03(土) 23:14:16 ] カススレ晒しage
616 名前:デフォルトの名無しさん [2006/06/03(土) 23:20:45 ] すいません、初心者なのですがdupという関数について教えてください。 openしたファイルポインタAをdupで複製?した場合というのはAをclose すれば複製したファイルポインタもcloseされるのでしょうか? dupの認識が違っていたらすいません
617 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 01:27:25 ] 単利計算と複利計算を行うプログラムについて、質問させてください。 環境はWindowsXP.VS.NET2003。Win32コンソールアプリケーションです。 void main() { float a,r,c;/*r:金利c:複利*/ int i,y,method; /*預ける年数*/ printf("いくら預けますか?"); scanf("%lf",&a); printf("何年間預けますか?"); scanf("%d",&y); printf("運用方法を設定してください。単利なら0,複利なら1を入力してください。"); scanf("%d",&method); if(method==0){ printf("金利はいくら(%%)ですか?"); scanf("%f",&r); for(i=1;i<=y;i++){ a +=a*(r/100); } printf("元本は%f円になります\n",a); } else if(method==1){ printf("複利はいくら(%%)ですか?"); scanf("%f",&c); for(i=1;i<=y;i++){ a = a*(1+r/100); } printf("元本は%f円になります\n",a); } else printf("終了します。\n"); } ですが、いざ元本を出そうとすると、Stack around the variable 'a' was corrupted. と表示されてしまいます。お力添えの程出来たらよろしくお願いいたします。
618 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 10:03:00 ] >>617 > scanf("%lf",&a); scanf系において%lfはdobuleを意味する。 floatを使う必要なんてない。全部doubleでいい。 そもそもお金が絡むのに浮動小数点数を使ってよいのかという問題もあるが。 void main()を使う必要もない。int main()でいい。
619 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 21:18:38 ] >>618 ありがとうございました。 単利の計算が間違っていた(複利と一緒だったorz)。 ので直しましたが、それ以外はうまくいきました。 小数点以下は二桁まで取ることにしました。 ありがとうございました。
620 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:02:45 ] scanf("%d",&r); scanf("%d",&h); A=ff (r,h); ff=f2; V=ff (r,h); printf ("表面積=%f 体積=%f",A,V); return 0; }(後は省略) この問題でhとrをよみこみたいんですけど こういうふうに書くとどんな数字を読み込んでも答えが0になって しまうんですけどどこが間違ってますかね・ ちなみにscanfのかわりにh=1とかって定義すればしっかり値はでます。
621 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:03:58 ] すいません途中しかコピペしてませんでした。こんな感じです #include <stdio.h> #define PAI 3.14159 double a,b,r,h,A,V; double f1 (double r2,double h2); double f2 (double r2,double h2); main(void) { double (*ff)(double r2,double h2); ff=f1; scanf("%d",&r); scanf("%d",&h); A=ff (r,h); ff=f2; V=ff (r,h); printf ("表面積=%f 体積=%f",A,V); return 0; }
622 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:14:35 ] うはぁ、突込みどころが満載だ。 ・doubleで計算したいならPAIは精度が足りない。 ・そもそもPAIってなんだよw ・変数は極力グローバルに置かない方がいい。 ・f1()とf2()が外部にあるなら、宣言はインクルードファイルで行なう方がいい。 ・関数名は特別な理由でもない限り、中身が判る名前にしよう。 ・main()の戻り値型は書くべき。 ・実験的にやってみたいだけなら止めないが、関数ポインタを使う必然性がない。 ・scanf()で型指定子を%dにするならint *を渡す必要がある。 ・逆に、double *を渡したいなら型指定子は%lfだ。 ・そもそもここはC♯の立て損なったネタスレだ。
623 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:19:13 ] ほんと、ごめんなさい でも解決しました><
624 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:23:44 ] 愚かな俺に教えて下さいまし、みなさま・・・ BYTE byData = 0x0f; byData = byData << 4; (VC .net SP 適用なし) これ実行すると byData が 0 になる。 3 ビットシフトだとちゃんと 0x78 になるのに・・・。 なぜだぁぁぁぁぁ!!
625 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:47:36 ] >>624 自己解決 VC .net のシンボルウォッチのバグですた・・・ おぃおぃ、VC6 から劣化してどーすんのよ MSさん〜〜orz
626 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 05:49:05 ] 2つ整数を入力して商と剰余を求めるんですが・・・ 20-6=14 14-6=8 8-6=2 3回引いたので商が3、剰余は2、というふうに求めろ、という問題です。 商は4、剰余4と出てしまいます。 #include <stdio.h> void main(void) { int a,b,c,d,e,f; printf("2個の正の整数を入力\n"); scanf("%d %d",&a,&b); if (b>=a) { c=b; b=a; a=c; } d=a-b; e=1; while (d>=0) { d=d-b; e=e+1; } printf("商%d 剰余%d",e,d); }
627 名前:デフォルトの名無しさん [2006/07/19(水) 07:17:44 ] d>=0だったら一回余分に計算しちまいますね・・・ 自己解決しました。スレ汚しすんません。
628 名前:デフォルトの名無しさん [2006/08/15(火) 08:13:19 ] 巨大な乱数ファイルの後ろから1文字ずつ消していき、 ファイルサイズを2GByteにすることってできますか? ファイルサイズを取得するまではいけたのですが、 1文字ずつ消す方法がわかりません。 消す方法はありませんか?
629 名前:デフォルトの名無しさん mailto:sage [2006/08/15(火) 11:09:04 ] >>628 一文字ずつじゃなきゃいけないの? ファイルサイズを単純に切り詰めるだけでいいならbsd/POSIX系関数で truncate()/ftruncate()なんてのがあるけど。
630 名前:デフォルトの名無しさん [2006/08/15(火) 11:14:03 ] #include <stdio.h> void mystrcpy(char *strA, char *strB); int main(void) { char str1[11], str2[11]; puts("Input str1[11]"); fgets(str1, 10, stdin); mystrcpy(str1, str2); printf("str1 = %s\n", str1); printf("str2 = %s\n", str2); return 0; } void mystrcpy(char *strA, char *strB) { int i; for(i=0; *(strA+i); i++){ *(strB+i) = *(strA+i); } } strcpy関数を自分なりにつくっていたところ、上のようなものができました。 ですがコンパイルして実行すると文字列のコピーはうまくいっているものの、 変な文字列(文字化けした文字)も出力されてしまいます。 どこらへんがおかしいのでしょうか? (環境はWinXPHome、コンパイラがBorland C++ 5.1.1です) また、先週からC言語を勉強し始めたのですが、 ポインタを引数にしたり戻り値として利用するところが自分には少々難しいと感じています。 何かわかりやすい本やウェブサイトがあったら紹介していただけないでしょうか。
631 名前:デフォルトの名無しさん mailto:sage [2006/08/15(火) 11:19:39 ] >>630 文字列の終端の'\0'をコピーしていない。
632 名前:630 [2006/08/15(火) 11:31:59 ] おお、まさにその通りです。 助かりました。 while(*(strB++) = *(strA++)); として解決しました。
633 名前:デフォルトの名無しさん [2006/08/15(火) 13:35:40 ] >>629 一文字ずつじゃなくてもいいのですが、 ケツから2MByteくらいを消したいんです。 学校の課題なんで、切り詰めるだけでもばれないとは思いますが・・・。 #もし乱数データじゃなかったらばれるか。 #でもメモリ足りなくて開けないし・・・。
634 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:48:34 ] ここってC#スレ?
635 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 08:22:41 ] CとC#を一緒にすんなヴォケ
636 名前:タイトルのシャープが剥がされることも知らないのだろうか mailto:sage [2006/10/15(日) 10:39:11 ] >>635 >1
637 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 10:46:47 ] 立てた奴の意図などどうでも良い。
638 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 14:28:51 ] >>633 き ゃ ぴりん ☆ き っく ! でググれ
639 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 13:56:33 ] 質問です。 const int getHoge(){ return m_nData;} というように、返り値にconstをつける意味はなにかあるのでしょうか? ポインタなどを渡している場合ならわかるのですが、intやshortの場合の必要性がわかりません。
640 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 16:38:07 ] >>639 製作者がconstなんだと叫びたいとき。 というのは冗談だが、Cではともかく、C++では違いが全然ないわけではない。 int foo(); const int bar(); template<typename T> void hoge(T& x); void f() { hoge(foo()); //エラー:xはint&になるが、非constな参照型のインスタンスは右辺値で初期化できない。 hoge(bar()); //xはconst int&になり、constな参照型のインスタンスは右辺値で初期化できるのでエラーにならない。 } まあ普通はこんなことを気にする必要はない。
641 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 17:04:47 ] >>640 ありがとうございます。 微妙な違いですね。 別のことを試してみたところ、const int getHogeは、 int n = getHoge() とできてしまいました。全然constじゃないじゃん! 「エラー値とかだから計算する必要ないでしょ!だからconst!」って使い方をしようかと思ったのですが…。 素直にエラーはenumで型つけてやるほうがよさそうです。 ありがとうございました。
642 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 18:50:47 ] >>641 そりゃぁ代入しちゃえばconst性は失われますがな。 でないと、int foo = 100;すらできなくなってしまう。
643 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 10:06:58 ] /libpathの指定でProgram Filesみたいな空白のある場合ってどうすればいいのでしょうか? #pragma comment (linker, "/libpath:\"/Program Files/XXX/lib\" ") としてみましたがうまく動いていないみたいです includepathの指定も#pragma でできないのでしょうか?
644 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 21:14:26 ] DrawStringでタブ"\t"を表現する方法を教えていただけないでしょうか 検索しようにも上記単語だと難しいので困ってます
645 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 11:40:13 ] 方法 : 描画されたテキストにタブ ストップを設定する msdn2.microsoft.com/ja-jp/library/2c6tzes6 (VS.80).aspx
646 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 12:51:09 ] >>645 ありがとうございます そちらの参照先のように、決められた形(というのでしょうか)で表現したいのではなく 1 \t 222 \t 333 44444 \t 555 と表示する場合に3と5の表示開始位置が揃うようにしたいのですが 方法はないでしょうか
647 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 17:26:01 ] 学校の課題で使うのですが、ガウスの消去法で4行4列の式を解くプログラム乗ってるサイトありますか? サイトから引っ張ってきていいと言われたので・・・ 探したんですけどいっぱいあってどれが正しいのかわかんなくて
648 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 20:37:54 ] 結果が正しければどれでもいいのでは
649 名前:131 [2007/01/25(木) 21:12:22 ] すみません、誰か分かる人はいませんか? どうしてもC言語でJPEG画像を表示したいんです。 おねがいします。
650 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 21:22:39 ] 適当に解凍してただのビットマップを取り出せばいい。
651 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 21:47:22 ] jpeglibとかあるだろ
652 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 22:01:39 ] 次に131がレスするのは2010年頃と予想
653 名前:デフォルトの名無しさん [2007/02/15(木) 23:14:58 ] 質問です!動的メモリ確保をつかったクラスみたいなものを作りたいんですが、 malloc() とfree()を使う方法では一つの関数内で完結させれば上手くいくのですが、 複数の関数でそれをやると上手く行きません。例えば↓では、関数b()で エラーとなってしまいます。何故でしょうか?もう弱り果てています… #include<stdio.h> #include<stdlib.h> void a(int*, int); //メモリ確保 void b(int*, int); //メモリ開放 main(int argc, char* argv) { int size; int* array1; int* array2; size=10; //うまくいく array1 = (int*)malloc(sizeof(int)*size); free(array1); //うまくいかない!(bのところでメモリ領域破壊が…orz) a(array2,size); b(array2,size); } void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); } void b(int* array, int size){ free(array); }
654 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:24:48 ] > void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); } arrayはarray2のコピーであり、それを書き換えたところでarray2にmallocの戻り値は代入されない。 したがって未初期化のarray2をbに渡し、それをfreeしようとしてお亡くなりになる。 やるならvoid a(int** array, int size) { *array = (int*)malloc(sizeof(int)*size); }
655 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:40:54 ] >>653 関数a()に渡したarray2は、array2自体が何ら設定されていないのだがあんたの使うコンパイラは警告してくれないのか? オプションで警告レベルを調整できるのなら引き上げておくことを進めておく。 で、件の目的なら>654でもいいがint * a(int size) {return malloc(sizeof(int) * size);}でもいいね。
656 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 01:07:52 ] #include <stdio.h> void f(int i) {i = 42;} void g(int* p) {*p = 42;} int main(void) { int x = 7; f(x); printf("%d\n", x); g(&x); printf("%d\n", x); return 0; } 上と同じ理屈。短絡的に言えば引数経由で値を返したいときには*の数を1個増やすということになる。 #include<stdio.h> #include<stdlib.h> void MyAlloc(int**, int); void MyFree(int*, int); int main(void) { int size = 10; int* array2; MyAlloc(&array2, size); MyFree(array2, size); return 0; } void MyAlloc(int** array, int size) {*array = (int*)malloc(sizeof(int) * size);} void MyFree(int* array, int size) {free(array);}
657 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:47:47 ] 共有メモリ上にポインタを利用した連結リスト作成したいけど どうやって作ればいいのですか?
658 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:52:37 ] >654-656 有難う御座いました!なぜダメなのかも解りました。 これで課題の〆切に間に合いそうです.。。
659 名前:デフォルトの名無しさん [2007/03/02(金) 19:45:06 ] Windowsでマイクロ秒まで測る方法を教えてください 環境は、WindowsXP+bcc32です。
660 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 17:46:55 ] >>659 どんなアプリ作ろうとしてんの? そもそもXPはRTOSじゃねーからマイクロ秒でなんらか の値がとれたとしても精度はないよ?
661 名前:デフォルトの名無しさん [2007/03/10(土) 13:47:24 ] Cを勉強したいんですが まず最初に読んだらいい本ってありますか? 種類が多すぎてどれがいいか分からないんですけど
662 名前:デフォルトの名無しさん [2007/03/10(土) 22:36:29 ] 起動されているスレッドを順番に停止する関数を作りたいんですが、 何の関数を使えばいいんですかね? pthread_join()は起動しているスレッドが自分で終了するまで待ってる関数だから 無限ループしているスレッドを終了できなし。 pthred_exit()はpthread_join()の戻り値を引数に使うからpthread_join()使わないと無理だし。 誰かお願いします。教えてください。
663 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:09:47 ] >>661 ナカーマ しかし俺はさっきコンパイルという言葉を知ったモロ初心者><
664 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 16:42:11 ] 推薦図書/必読書のためのスレッド PART34 pc11.2ch.net/test/read.cgi/tech/1173930196/l50
665 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:59:56 ] #include <windows.h> #include <stdio.h> void main() { double a; a = 2/6; printf("%f\n", a); } VC6にて上のように単純に2÷6を計算したら0が出力されます。 0.33333・・・を出したいのですがどうすればいいのでしょうか?
666 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:08:06 ] ↑ 解決済みです
667 名前:デフォルトの名無しさん [2007/05/14(月) 22:11:03 ] windowsXP上でcのプログラミングをしたいのですが フリーのものでコンパイラ、エディタなどでお勧めのものを教えてください なるべく日本語のもので見易さ、編集しやすさ最優先で、 linux上でも動かしやすいものであれば嬉しいです(←これはついでなのでそこまで重要でもない)
668 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 23:51:43 ] 残念ながらcは英語をベースにした言語なので、「日本語のc」はありません。
669 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 01:39:33 ] 下らないレスするくらいなら相手するなよ… >>667 好きなの選べ ttp://homepage3.nifty.com/mmgames/c_guide/p_compiler.html
670 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 01:49:55 ] >>667 Linuxなら、どのディストリにもgccが入っているだろうし、vi(vim)かそれが嫌ならemacsがあるだろ。 それを踏まえて、WinXPでもcygwin入れてgccを使えばいいし、取り敢えずvimでいいだろ。
671 名前:下らなさの2乗 mailto:sage [2007/05/15(火) 10:15:29 ] >>668 「c」などという言語はありません。
672 名前:デフォルトの名無しさん [2007/05/20(日) 03:27:08 ] OS:VineLinux コンパイラ:gcc こんばんは、ppm形式(フルカラーraw形式)の画像のピクセルごとの,R,G,Bの色のデータを メモリを動的に確保して1次元の配列にぶち込みました。 これを任意の角度回転しようと考えているのですが、 どうも1次元の配列ですと直交座標で扱いにくく困っています。 そこで新たに二次元配列を動的に確保して・・・とも考えたのですが 元画像、出力画像のデータを取り込んでいるので、得策でもないような気がします。 なんとか直交座標系として扱いつつ、元画像を回転させて出力画像を作る方法ありませんでしょうか? ソースがあるだとかよい案があればよろしくお願い致します。
673 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 03:50:33 ] >>672 座標計算する関数を作ってしまうとか。 pc11.2ch.net/test/read.cgi/tech/1179301993/99
674 名前:デフォルトの名無しさん [2007/05/20(日) 06:03:17 ] printfの書式で14.850000や2.00や5.012000の様に小数点以下で最後に0が続く場合、 その0を省略する方法を教えて下さい。
675 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:16:09 ] >>674 (っ´▽`)っ printf("%.0f\n", d);;
676 名前:デフォルトの名無しさん [2007/05/20(日) 08:19:40 ] ’0’、’1’、’2’、’3’を’-1’、’0’’、’1’、’2’に置き換えるためにhand=C-’0’-1とするのですが、この式の間の『’0’』の存在意義がよくわからないです。
677 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:29:08 ] >>676 (っ´▽`)っ >hand=C-’0’-1 このCには文字が入っているんじゃないかな? このhandには数値が入っているんじゃないかな? Cに'3'が入っている時を例に挙げよう。 '0' = 0x30 = 48 '3' = 0x33 = 51 hand = 51 - 48 - 1 = 2 つまり、文字を数値に変換するために'0'の値を引いているの。 '0'(文字の0)と0(数値のゼロ)は違うのはわかるよね。 メモリに格納される時のビット列が違うの。 2進法で考えると '0'は00110000、0は00000000で格納されるよ
678 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 08:32:40 ] >>674-675 それよりも%gだろ
679 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:34:52 ] >>674 >>678 (っ´▽`)っ そうだった! %.0fだと小数点以下が全く出なくなっちゃうね☆
680 名前:デフォルトの名無しさん [2007/05/20(日) 08:38:50 ] あっ、はい。文字としての扱いのままでatoiとかはしてありませんでした。 大変ありがとうございます。ところで、、'0' = 0x30 = 48 '3' = 0x33 = 51 とゆう式の流れはまだ学習していません。できれば教えて下さい。
681 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 09:01:43 ] >>680 (っ´▽`)っ 文字コードだよ。 ISOとかそういう偉いところが0x30は'0'を表すって決めたんだよ。 ところで、0x30は「16進法で30」っていう意味だよ。 0xがつくと16進法 0がつくと8進法 ちなみに'\n'は0x0a、'\0'は0x00だよ。
682 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 09:06:10 ] (っ´▽`)っ 最も基本的な文字コード、ASCII ttp://ja.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange 他の文字コードはASCIIを踏襲しているよ。 シフトJISとかunicodeとかもASCIIの文字コードを含んでいるよ。
683 名前:672 [2007/05/20(日) 09:21:35 ] >>673 ありがとうございます。 座標の計算関数はできてはいるんですが、力及ばず入出力を二次元配列でしか設計できませんでした ということでそっちに行ってきます
684 名前:デフォルトの名無しさん [2007/05/20(日) 09:23:06 ] 大変ありがとうございます。やっと理解できました。
685 名前:デフォルトの名無しさん [2007/05/20(日) 10:11:40 ] やっぱわかんないちす。51と48は何を表してるんすか?てか16進法わからないです。
686 名前:デフォルトの名無しさん [2007/05/20(日) 10:19:34 ] やっぱわかりました。十進法ですね。
687 名前:デフォルトの名無しさん [2007/06/05(火) 02:44:30 ] 文字コードの話題がちょうどでてるので、タイムリーに質問。 cygwinでgccでコンパイルするときって、shift-jis以外は使えないんでしょうか? ちなみに、OSはwin-xp proです。 「表」の字がコンパイルしたら、エラーがでました。 んで、色々しらべて、shift-jisがまずくて、他にもエラーがでる文字があるってことまではわかったんですが、 解決法がいまいちわかりませんでしたorz もちろん、ソースの文字コードを色々と丸々かえて、再コンパイルしてみましたが、 完全に文字化けしてしまいました。 解決法とかはありますか? また、もし、他の文字コードを使えるのでしたら、オススメの文字コードとかありますか?
688 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:18:32 ] >>687 つ input-charset いろいろどころか全然調べてないだろ
689 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:31:44 ] ついでにexec-charsetも
690 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:00:00 ] んじゃ更に、 input-charset=euc-jp exec-charset=cp932 とか書いてみる。
691 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 03:06:28 ] >>688-690 勉強になりました。 dです。
692 名前:デフォルトの名無しさん [2007/06/13(水) 13:28:58 ] グローバルで宣言してた変数などを ポインタ等使ってローカルでの宣言で実装すると 常時使ってるメモリは少なくなると思うんですけど 速度的にはグローバルで宣言したほうが良いんですか?
693 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:33:33 ] >グローバルで宣言してた変数などを >ポインタ等使ってローカルでの宣言で実装すると >常時使ってるメモリは少なくなると思うんですけど >速度的にはグローバルで宣言したほうが良いんですか? グローバルかローカルかと言う議論にポインタは関係ない。 使用メモリを云々するほど広大なメモリを取り扱う話ならヒープを使うべきだ。 速度に関しては、実測が基本。
694 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:57:01 ] これの話にポインタは関係ないですけど、 複数の関数で共通した変数使う場合に 普通はグローバルで宣言してしまいますけど ポインタなど使えばローカルの宣言でもイケるけどどっちが速いのか って事を聞きたかったんです。 けど、実測しかないですか。 メモリも抑えなきゃいけないんだけど速度を最重視して作らないいけなくてorz
695 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:27:44 ] >>694 >複数の関数で共通した変数使う ために >ポインタなど使えばローカルの宣言でもイケる というのはつまり、malloc() 等でヒープを確保するんだろ? >普通はグローバルで宣言 した場合は static なデータとしてロード時に確保されるわけだが 使用するメモリ量にはまったく差がないし、速度にも有意な差があるとも思えん。 よって益々、>>693 の結論通り。
696 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:53:55 ] 速度は変わらないんですね。 それだけ教えていただいて感謝してます。 ありがとうございました。 ただ、メモリ量は差はあると思われます。
697 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:12:45 ] スタックとヒープの区別もつかないやつが、「差はあると思われます」と言ってもなあ・・・
698 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:30:47 ] メモリ使用の差の話は、静的確保だとプログラムの実行期間中ずっと 確保されたままなのに対して、動的確保だとそうではない、ということだろ。 >常時使ってるメモリは少なくなると思うんですけど
699 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:11:57 ] 寒いなスレ開いちまった。。 間違った事言ったなら質問者と回答者の立場はどうあれ一言くらい・・・
700 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 08:34:31 ] 初心者とか中級者とか上級者の堺はどのあたりだと思いますか?
701 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:01:11 ] 大阪のあたりじゃね?
702 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 06:08:03 ] 境でした。。すみません
703 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 10:14:38 ] 鳥取のあたりじゃね?
704 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:21:39 ] 東京にも武蔵野市に境がある
705 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:25:12 ] 住所にはないのに、町田市の駅にも境がある。
706 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:27:24 ] 私はあなたたちを少しかいかぶっていたみたいです こんなにイライラするレスを返されたのは初めてではありませんが それでもかなり上位に来るうざさだと思います 日本語が通じてるのにわざと他の意味を探す病気がPGには流行っているみたいですね 私の知り合いもそういうビョーキにかかっている時期がありました 本人はただふざけているだけのようなのですが 周りからしてみればはたはた迷惑です 面白くもなんともないのに本人は延々とボケを続けるんですからね あなた方もそれと同じ事やっているんですけどどうですかわかりませんか 全然面白くないですよ少しはバラエティ番組でも見たらどうでしょうか バラエティ番組見たからってあなたたちが面白い事を言えるとは思いませんが? 冷めるネタくらいは学習できると思いますちょっとあまりにもこれは酷い流れだと思います 更新されてないスレッドでもお気に入り登録にして毎日巡回でもしているんでしょうかね 質問スレで質問する人回答する人、スレは違っても同じだったりすることがよくあるんじゃないでしょうかね けれど同じスレで違うことを聞かばスレ違いと言い別のスレで同じ人が答えたり?面白いですねそういうの このスレの人達は凄くつまらないです一ミリたりとも笑える要素がないと思います 笑えるスレにしてくださいとは言いませんがこういう流れを作るんだったら もう少しひねるとかしてくださいねってくださいね
707 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:30:45 ] もう少しひねるとかしてくださいねってくださいねってくださいねってくださいねってくださいねってくださいね いかん、流石に飽きた。
708 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:39:03 ] >>706 初級とか中級とかワケ解らん質問したのお前なのか? くだらん質問をしたのを反省しろよ
709 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:56:03 ] >>706 人の振り見て輪が振りなおせ。そのレスもおもしろくないぞ。 おもしろくしたいと思うなら、まず自分からおもしろいレスというものを見せてほしい。 まあでも、この板にいるような人間なんて、それが本業ではないのだから、 おもしろさを期待するほうが間違っている。 と、やっぱりおもしろくないマジレスを返してみる。
710 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 04:32:22 ] >>706 で、君は誰なの?
711 名前:デフォルトの名無しさん [2007/07/01(日) 21:21:08 ] 数式Parserのライブラリってご存知ないでしょうか? 複素数計算機能を付加したいんですが、 bcに丸投げというのも力づくすぎるような気がしてまして・・・・
712 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:46:54 ] 初歩的な質問で申し訳ないです 文字エンコードについての質問ですが、 HPから特定の文字列を検索して取得するプログラムを作ってたんですが、 対象のサイトの文字コードがEUCの場合、一旦JISに変換して文字列比較をしないといけないですよね? 文字エンコード変換の、簡単なソースを知ってたら教えていただけないでしょうか?
713 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:49:08 ] >>712 EUC⇔SJIS⇔iso2022の変換は難しくないが、どうせUTFとの変換で悩む羽目になるから iconvか何かのライブラリを使っとけ。
714 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:53:46 ] >>713 返信ありがとうございます。 勘違いしてました。 オープン・ソース使ってうまくいかないと思ってたら EUC -> SJIS しなくてはいけないのに SJIS -> EUC としてました。 お手数かけましたm(_ _)m
715 名前:デフォルトの名無しさん [2007/07/02(月) 00:15:07 ] 初歩的な質問ですがよろしくお願いします。 とある関数内で、malloc()でヒープ領域を確保して 得たポインタを別のタスクに投げ渡すという処理をしています。 他のタスクに投げ渡したら領域を確保した関数は、終了します。 malloc()で作った領域は、free()を行うまで領域の確保されているんですよね? 逆にmalloc()のヒープ領域で無く関数内で定義した変数のポインタだと どうなってしまうんでしょうか? 関数終了しても変数のポインタさえ分かればどこからでも 値は取り出せそうなのですが・・・・・。 聞きたいこととしては、 ・malloc()で得た領域は、関数が終了しても参照できますか? ・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか? です。よろしくおねがいます。
716 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 08:42:36 ] >・malloc()で得た領域は、関数が終了しても参照できますか? yes >・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか? int *f(void) { int local; return &local; } みたいなの? それなら、関数終了時点でポインタは無効になる。
717 名前:デフォルトの名無しさん [2007/07/03(火) 01:18:45 ] >>716 レスありがとうございます。 >・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか? の質問に対する例題としては、似たような感じです。 下のようにローカルなスコープで定義した変数を 他タスクに渡して処理を終えた時にもint localのポインタは有効であるか? と言う事が気になってたのです。 丁寧な説明ありがとうございました。 int f( void ){ int local; test(&local); /* 他タスクへイベント要求 */ }
718 名前:デフォルトの名無しさん [2007/07/03(火) 11:19:17 ] 無効
719 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:27:36 ] >>717 それだったら test() を終了後も local は使えるよ。 int local は f() からリターンするまで有効。
720 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:49:59 ] >>719 質問を読み違えてないか? タスク云々といってるんだから、testが引数をなんらかの形で保存していて、 それがfが終わった後も有効かという話だろ。
721 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:53:52 ] testがポインタをグローバルな変数に入れたり、longjmpしたりするんかいな
722 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:58:31 ] >他タスクに渡して処理を終えた時 これがどういう・・
723 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 18:05:43 ] 別スレッドに渡したり。
724 名前:デフォルトの名無しさん mailto:age [2007/07/03(火) 23:36:06 ] ただでcをやりたいんですが、なんてソフトをDLするといいですか?
725 名前:デフォルトの名無しさん [2007/07/04(水) 00:42:18 ] 環境は?
726 名前:デフォルトの名無しさん [2007/07/04(水) 00:44:16 ] まあwindowsならBCC(Borland C++Compiler)で間違いないと思うよ。 CもC++もいける。 けどサイトが長い間落ちてるっぽいね よくわからんけど
727 名前:デフォルトの名無しさん [2007/07/04(水) 00:54:28 ] >>726 さん 虫けらLevelの質問ですみません。 今日書店でC++ Buiider 6.0というのを見たんですが、 Buider 6.0ってなんなんですか? 後、聞きたいんですが、 トロイの木馬やキーロガー、白木葉子はどの言語で作れるのでしょうか?
728 名前:デフォルトの名無しさん [2007/07/04(水) 00:57:01 ] そんなものが作りたいなら自力で全部やれ そうでない限り作れん
729 名前:デフォルトの名無しさん [2007/07/04(水) 01:04:35 ] >>728 自力……かぁ(´・ω・`) まぁ…確かになぁー… 甘えてられないか
730 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:03:54 ] くだすれC++Builder(超初心者用)その3 pc11.2ch.net/test/read.cgi/tech/1171219191/ 綴りが違う上に同じレス内でも違うのはどうかと
731 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:14:02 ] そういうのは”ログが残らない場所”で聞け てかいろんな意味で貴殿はC/C++やられるのが良いと思う 俺は作った事無いから、作った事ある奴じゃないとわかんないと思うけどな
732 名前:デフォルトの名無しさん [2007/07/04(水) 09:20:18 ] bccぐらい凡人でも猿でも軽々入手できるもんなんだから そんなところで2chの質問スレに頼ってるようじゃ 何も書けんぞマジで 本当にやる気あるのか
733 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 10:57:33 ] いやいや、凡人や猿は何も考えずにVS買うよ 買ってくれておおいに結構
734 名前:デフォルトの名無しさん [2007/07/04(水) 12:21:42 ] >>731 本買おうと思う。 開発環境は…どうなのかな家のPCネット繋がってないから ネットカフェとかしかないんだ
735 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:33:15 ] >>724 KNOPPIX, Debian GNU/Linux, Fedora 7, Vine, Plamo, ...
736 名前:デフォルトの名無しさん [2007/07/04(水) 16:35:05 ] …マイクロソフトのVisual C++ 6.0(開発ツール)って高いんですか?
737 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:38:48 ] いまさらそんなバージョン買うなよ
738 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:49:00 ] どうしよう
739 名前:デフォルトの名無しさん [2007/07/04(水) 17:02:53 ] >>737 今はどんなバージョンがあるんですか? 後…高い?
740 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:04:54 ] VC++6.0 → 2002 → 2003 → 2005 今は2005だな、EEなら無料。 MFCとリソースエディタが無いけどな。
741 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:23:23 ] >>739 Visual C++ 2005 Express Edition 無料 Visual Studio 2005 Standard Edition 3万円弱 Visual Studio 2005 Professional Edition 11万前後
742 名前:デフォルトの名無しさん [2007/07/04(水) 17:26:00 ] >>740 さん 2005って高いんですか?
743 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:31:38 ] >>742 2005のEE=Express Editionは無料 今からプログラミング始めるの? ググる事くらい覚えないと習得できないよ
744 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:06:14 ] >>741 Academic (中身はStandard) 4,800円もあるだろ。
745 名前:デフォルトの名無しさん [2007/07/04(水) 18:06:19 ] >>743 さん ググれますが、携帯からしかネットできないんです んでもって俺プログラミング初めてなんです。 FLASHLITE XHTML PHP かじった程度の人間ですから。 >>741 さんは何を使ってるんですか?
746 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:13:09 ] >>745 自分はProfessional版使ってるよ これから勉強を始めるならExpress版でも十分できる 物足りなくなってから上位のバージョンを買えばいいと思うよ 或いはその頃には次期バージョンが出てるかもしれないし じゃあまずPCでネットする環境を整える事から始めよう
747 名前:デフォルトの名無しさん [2007/07/04(水) 18:15:35 ] >>746 さん 優しいですね(´・ω・`) ありがとう
748 名前:デフォルトの名無しさん [2007/07/05(木) 11:44:35 ] 私のコーディングスタイルは、 グローバル変数 int ThisIsIntExtern //単語の先頭を大文字 ローカル変数 int thisIsIntLocal //単語の先頭を大文字(ただし最初の文字は小文字) 関数 void this_is_function(){ } //全部小文字で、下線でつなぐ #define THIS_IS_MACRO //全部大文字で、下線でつなぐ なんですけれど、変でしょうか?
749 名前:731 mailto:sage [2007/07/05(木) 13:56:16 ] >>734 初心者なら本買ったほうが良いね Visual Studio買う以外の手段には ネットカフェでbcc落としてメモリに入れて持ち帰るって事も出来るんだが手こずるかも 付属のCD-ROMとかにコンパイラが入ってる本を買う手もある けどね、分からない所はすぐぐぐれないとやってらんなくなるかな
750 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:01:16 ] >>748 別に統一されてりゃいいんじゃね? Cのみだけど、俺の場合は グローバル int g_iValue; ローカル int iValue; 関数 int GetValue( void ) 定数 #define VALUE_MAX 基本的に定数以外で"_"を使わない。
751 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:32:34 ] よい子がC言語の勉強実況してるからみてやろうぜ WMPのファイル→URLを開く→matoinu.orz.hm:30000 をコピペ→OK 実況スレ 何でも実況V なんでも実況フリーダム live24.2ch.net/test/read.cgi/livevenus/1183654888/ 面白いぜwwwwww
752 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 11:29:59 ] 大学の講義などでC言語を教える立場に立つ為にはどれほどの勉強が必要なのでしょうか ちなみに私は今までさまざまなプログラムを作成してきていてそれなりにCを使えるようになったと思うのですが その先はどうやって勉強すればいいのか? というのは将来、教授になりたいのですが 近い将来に助手になったときにプログラミングを学生に教える立場になるわけです Webサイトで先生方の講義資料などを拝見してみますと、自分の知識力の低さを痛感するばかりです とはいっても詳細な入門書レベルの内容なら全て空で説明するくらいはできるのですが 問題はその先なのです
753 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 12:55:24 ] >>752 入門書なんていう役に立たないものを基準にしている辺りでダメ過ぎ。
754 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:30:11 ] >>753 プログラミングの講義はプログラミング言語の使い方を教える講義です 役に立つか立たないかという有用性は、工学的には非常に重要な要素ですが それはプログラムを作る者それぞれの価値基準に基づくものであり 教える人間が考える有用性を基準に講義すべきでは無いと思います
755 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:41:22 ] >>752 講義資料を見て自分はまだ知らないと気づいた事って何?
756 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 14:14:29 ] 最初から本買わせればいいじゃん あなたは本に書いてあること繰り返し説明する手間も省けるし 学生も本読めば済む気だるい講義を飛ばしてさっさと応用を学べる、万々歳
757 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:26:13 ] 講師なら言語の歴史や規格についても詳しくないとやだな。 環境依存のコードをさも標準かのように教えられたらたまったもんじゃない。 Cだけじゃなくアセンブラとかにもある程度精通してて欲しい。 少なくとも、例えばswitchとif-elseの羅列が最適化で大抵マシン語レベルで同じになるとか位は。 あとは、同じことを100回聞かれても折れない心と、mainが1000行あっても 解読できる根性があればいいんじゃね?
758 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:25:40 ] ちゃんと教えないと自分が凄く読みずらいコードを数十人分解読する羽目になるわけか 考えただけでおそろしくなた
759 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:44:38 ] ×読みずらい △読みづらい ○読み難い
760 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:55:09 ] × △読みづらい ○ ○読みづらい
761 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 06:20:06 ] やんでるか?お前ら 神経質なのはプログラミングだけで良いんだぞ
762 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:35:10 ] ×やんでるか? ○やんでるのか?
763 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:38:28 ] やってるか?
764 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:42:29 ] あめならやんでるよ。
765 名前:デフォルトの名無しさん [2007/07/12(木) 13:22:48 ] C言語をはじめようと、近所の図書館で「C言語を256倍使うための本」 なる本を借りてきたのですが、最初の数ページ目にCをやる前に、 パスカルとアセンブラをやれ、とあったのですが俺はどうすれば?
766 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 14:04:33 ] そんなクソ本やらずにサイトでも見てやれ Programing PlaceとかWisdomsoftとか
767 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 20:41:57 ] Wisdomの人って若いよなー。 1981年って事は、今25〜26歳か。 自分の努力不足が身に沁みる。
768 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:52:00 ] 256倍使うための本シリーズは全部糞本だから^^; くだらねー本量産してんじゃねーと思う^^;
769 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:51:25 ] >>765 その本はあれだ、当時のマニア本だから。今勉強するために読む本じゃない。
770 名前:765 [2007/07/23(月) 22:10:38 ] レスをくれた人たちへ。 とりあえずアセンブリをやろうとMIPSの教本を同じ図書館で入手。 最初の数ページ目にC言語を先に理解しておく必要があるとあり、 無限回廊に突入。
771 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 00:18:50 ] >>770 >769
772 名前:デフォルトの名無しさん [2007/07/25(水) 18:15:09 ] 型の一時的な変換に関しての質問です。 もともと整数型,char型のデータをある関数内では実数型として扱わなければならないので 下のコメントのように別の配列を用意しました。 代入する際にキャスト変換(double)を使って型を合わせようとしたのですが 'double **' 型は 'int **' 型に変換できない(関数 main(int,char * *) ) 2 番目のパラメータは int ** 型として定義されているので double ** 型は渡せない(関数 main(int,char * *) ) というように実数型に変換したつもりなのに整数型のままだったりするようです。 どうすれば正しく型変換できるでしょうか #include<stdio.h> int main(int argc, char **argv) { unsigned char *data={1,0,1,1}; int **P={{1,0}, {0,1}}; //この2つが本来のデータ型 double a; int i,j; double *data2, **P2; //コピー。ある関数function内でdouble型で扱う必要がある for (i=0;i<2;i++) { for (j=0;j<2;j++) { P2[i][j] = (double) P[i][j]; //型を合わせるために(double)でキャスト変換 } } for (i=0;i<4;i++) data2[i] = (double) data[i]; function(a,P2,data2); } void function (double x, double **y, double *z) //ある型変数の型定義
773 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 18:17:39 ] まてまて、配列でも構造体でもないものを{ }で初期化できないだろ。
774 名前:デフォルトの名無しさん [2007/07/26(木) 07:27:42 ] ポインタだけ宣言して領域の確保がされてないし いきなり2次元配列でコピーしてるし 2次元配列のポインタだけ渡しても大丈夫な関数なのか
775 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 10:07:59 ] 上から下まで勘違いでできているな
776 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 05:01:05 ] でも文字列だけ定数置けるのって理論的におかしいよな。
777 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 07:36:20 ] 別に
778 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 07:36:39 ] >>776 const int という意味ではないんだよね
779 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 10:22:05 ] tonosiki.mbnsk.net/uploader/src/up1495.jpg この問題の(3)と(4)が分かりません。 どうか教えて頂けないでしょうか・・・? よろしくお願い致します。
780 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:35:21 ] Object not found!
781 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:54:58 ] >>779 pc11.2ch.net/test/read.cgi/tech/1180856695/469
782 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 20:15:17 ] 蔵書整理してたら秘伝C言語問答ポインタ編が amazonのユーズド価格がクソ高くなってるの発見したんだがなんなの?
783 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:28:16 ] とりあえず出してるだけだろ 自由に設定できるんだし
784 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:07:47 ] あ、値段設定って自由なんだ。 絶版本て高く売れるのかな。
785 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:18:00 ] 本にもよると思う なんか絶版になった参考書は高く売れたりするとか 前アマゾンで本を売りまくってる人の番組中にやってたよ
786 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:31:50 ] 質問させてください。 以下のエラーメッセージが表示されてリンクに失敗しています。 考えられる原因があったら教えてください。 undefined reference to `__stdoutp'
787 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 03:02:32 ] 回答させてもらいます。 以上の情報では詳細の回答ができません。 より詳細な回答が必要なら情報をください。 __stdoutpが見つからない。
788 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:03:01 ] 何をどうしたら出たのか
789 名前:デフォルトの名無しさん [2007/09/09(日) 12:45:04 ] 質問です。 外部から提供されているヘッダーファイルにエクスポート用の関数が記述されており、 ヘッダーに手を加えずにこの関数に処理を追加したいと考えています。 そこで、#define で関数名の変更を試みたのですが、 error C2084: 関数は既に本体を持っています。 となってしまいました。 ヘッダーは今後も修正が入りそうなので、手を加えるのは回避したいのですが、 何か良い方法はあるでしょうか。 --test.h--(外部提供のヘッダーの例) extern "C" void __stdcall test(int a, int b) { printf("%d + %d = %d\n", a, b, a+b); } --test_ex.h--(関数名を置き換えて、代わりにエクスポートさせたい関巣をを記述) #define _test(a,b) test(a,b) #include "test.h" #undef _test extern "C" void __stdcall test(int a, int b) { printf("合計出力\n"); _test(a, b); }
790 名前:デフォルトの名無しさん [2007/09/09(日) 13:20:43 ] >>789 #define test(a,b) _test(a,b) #include "test.h" #undef test じゃないか?
791 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:04:35 ] >>790 あ、あれ。オオボケしてました。 意図した通りになりました。ありがとうございます。
792 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:30:44 ] VC++ Express 2005 の C/CLI で質問良いですか? 関数に System::String ^XX を引数渡しして関数内でXXに値をセット させようとしてるんですけど、これってひょっとして無理ですか? String のメンバ関数って新規にインスタンスを作る関数はあるんですけど、 既存コントラスタの内容を「変更する」メンバ関数が無いんですけど・・・。 WCHAR やら char を素直に引数に使った方が良いんでしょうか・・・ VC Express 2005 + WindowsSDK で Get/WriteProvateProfileString のラッパークラスをマネージドで作ってるんですけど、 これってひょっとしてかなり無謀ですか?API呼び出しはさすがにアンマネージドですが・・・ そもそも、VCのマネージドコードってひょっとして誰も使ってない? .Net勉強するなら素直にC#でしょうか? VCで.Netの勉強がてらマネージドでガリガリ書いてるんですけど、 まさか全然イミネェータイムしてます?
793 名前:デフォルトの名無しさん [2007/10/22(月) 00:52:02 ] System::Stringは書換不能な文字列。 どうするかというと、例えばSystem::String^% XXにするという手がある。 msdn2.microsoft.com/ja-jp/library/h9t2463y (VS.80).aspx ネイティブで言えば、これでは呼出元に反映されないから、 void f(char const* p) { p = "hoge"; } こうするというのと同じこと。 void f(char const*& p) { p = "hoge"; } .NETの勉強についてだが、<C++を十分に理解しているのなら>、 C++/CLIでも構わないと俺は思う。逆にC++をよくわかっていないのなら、 素直に.NETに関してはC#で勉強すべき。
794 名前:デフォルトの名無しさん mailto:age [2007/10/22(月) 00:59:14 ] ステレオで広がる初音ミク音源検索 youtv.atspace.com/?rSTV=STEREO+%E5%88%9D%E9%9F%B3%E3%83%9F%E3%82%AF
795 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:31:07 ] >>793 動きました、ありがとうございます! 基本的な事なんでしょうが、個人レベルで言語理解は難しいですね・・・。 クラス自体を static ref に出来なかったりと色々苦労してます(汗 C++は「わかってるつもり」ですが、<static_cast>やら<reinterpret_cast>やらで また勉強し直す必要がありそうです。 C#はwiki見た感じだと文法が凄く変わってるので一度じっくり 勉強しないと駄目ですね・・・ まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗 APIが恐ろしいほど使いにくいC#に需要があるとは・・・
796 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:14:49 ] >まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗 席捲だろ。とてもそうは見えないが。
797 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:46:00 ] 質問なのですが、表示される文字の大きさを変えるにはどうすればいいのでしょうか?
798 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:55:43 ] モニターを買い換える。
799 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 00:06:56 ] >>797 それは「文字のサイズを変える」プログラムはどうすればいいか?ってことだよな?
800 名前:デフォルトの名無しさん [2007/10/26(金) 14:12:47 ] アセンブラって何?
801 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 14:19:17 ] アセンブリ言語のプログラムを機械語のプログラムに変換するプログラム
802 名前:デフォルトの名無しさん [2007/10/31(水) 11:38:23 ] C++を学習するのに適切な書籍、WEBを紹介してください。 機械語、Cなどの言語は習得済です。
803 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:23:45 ] 質問です。 バイナリファイルを開いて、ファイルの先頭から順番に0、1を判別していきたいのですがどうすればいいでしょうか? rbでファイルを開いてから後がどうしていいのかさっぱりわかりません。
804 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:41:13 ] getc(fp) でファイルの先頭から順番に 1 バイトずつ読み込める
805 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:54:45 ] mmapとSystem Vの共有メモリって、 どちらにどういう長所短所があるんでしょうか。
806 名前:デフォルトの名無しさん [2007/12/08(土) 04:59:38 ] bcc5.5って実行が長いプログラムだと途中で止まるとか仕様ある?
807 名前:デフォルトの名無しさん [2007/12/08(土) 05:28:15 ] ないだろ
808 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 06:11:57 ] だよな。同じプログラムを100回動かそうと思ってやってんだけど90回はできて100回はできない・・・
809 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 13:23:24 ] pink.gazo-ch.net/bbs/27/img/200512/550933.jpg
810 名前:デフォルトの名無しさん [2007/12/09(日) 00:33:09 ] >>808 そりゃどっかにバグがあんだよ。 勘だけど、メモリがらみと見た。
811 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:14:10 ] int型のiを文字列に直す方法はありますか? コンパイラはgcc, 言語はC言語です。 あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
812 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:24:10 ] > int型のiを文字列に直す方法はありますか? sprintf,snprintf > あとstrcatが3つ以上の引数をとれないようなのは仕様ですか? 三つ目に何渡す気だ
813 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:35:00 ] いや "a" + i + "b" のようなことがしたいので、 strcat("a", i, "b"); と出来たらなと。
814 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 00:08:17 ] C++をやりましょう。 簡単にできますから。
815 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 12:01:51 ] >>814 サーセン本線はRubyでして。
816 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:24:37 ] sprintf()でなにが不足なんだ? sprintf(buf, "%s%d%s", "a", 3, b);
817 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 13:06:42 ] 教えてください。union ビットフィールド型を引数としてわたしたいのですが、 それは可能なのでしょうか?
818 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:25:45 ] >>817 なんでできないと思ったの?
819 名前:817 mailto:sage [2008/01/15(火) 20:56:24 ] >>818 union { /* WCER */ unsigned char BYTE; /* Byte Access */ struct { /* Bit Access */ unsigned char B7:1; /* Bit 7 */ unsigned char B6:1; /* Bit 6 */ unsigned char B5:1; /* Bit 5 */ unsigned char B4:1; /* Bit 4 */ unsigned char B3:1; /* Bit 3 */ unsigned char B2:1; /* Bit 2 */ unsigned char B1:1; /* Bit 1 */ unsigned char B0:1; /* Bit 0 */ } BIT; /* */ } WCER; /* */ このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、 関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、 引数や変数にはビット情報を保持できないと思っています。 その操作が必要なアドレスやビット位置を引数として渡して操作することは可能と思うのですが 処理速度を求めるためにビット直接操作したいのです。
820 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 20:58:41 ] WCERごと渡せばいいんでないの?
821 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:08:10 ] 速度が欲しくて1ビット単位の書き換えとか頭おかしいんじゃね?
822 名前:817 mailto:sage [2008/01/15(火) 23:53:14 ] >>820 ありがとうございます。 WCERではなく、結合先によってビット位置が異なっています。 >>821 マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
823 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:00:24 ] ビットフィールド使うのをやめるといいと思うんだ
824 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:15:46 ] >このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、 >関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、 >引数や変数にはビット情報を保持できないと思っています。 いいえ。ビットフィールドは渡せませんが、ビット情報は渡せます。 >処理速度を求めるためにビット直接操作したいのです。 いいえ。ビットフィールドを直接扱うことが最速とは限りません。 >WCERではなく、結合先によってビット位置が異なっています。 「結合先」ってなんですか? 自分語りをされても困りますが。 >マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。 いいえ。そんなのんびりした処理をするのなら多少重くてもなんら影響しません。 そもそも、ビット位置の計算は決して重い処理じゃありません。 結論。 >823
825 名前:デフォルトの名無しさん [2008/01/21(月) 20:09:47 ] Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。 プロのプログラマでもあまりにレベルが低い人が多すぎます。 そんな人に限って、自分のレベルの低さを自覚していない、、、 本人は構わないかもしれませんが、その下についた新人プログラマは たまったものではありません。(私が経験しました。) 今になって分かりました。 彼らもまた、理解できていなかったのです。 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。 私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、 今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。 と、嬉しいコメントをたくさんもらいました。 そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。 興味がある方はどうか、下のサイトをみてみてください。 mori.eco.to/
826 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:31:13 ] よし、NG追加
827 名前:デフォルトの名無しさん [2008/01/30(水) 20:22:40 ] すいません、c言語初心者なのですが以下のプログラムがうまくいかないのですがなんででしょうか? 修正点教えてもらえませんか? #include<stdio.h> #include <string.h> #define STR_SIZE 256 int main(int argc, char *argv[]) { int cnt; int pri_cnt; int n; int k; int sort_cnt1; int sort_cnt2; char temp[1]; if(argc < 3) { printf("\nUsage : %s STRING1 STRING2 [STRING3 ...\n\n",argv[0]); return 1; } printf("\n** String data **"); for(cnt = 1 ; cnt < argc ; cnt++) { printf("\n%s",argv[cnt]); } printf("\n** Changed string **");
828 名前:デフォルトの名無しさん [2008/01/30(水) 20:23:32 ] for(cnt = 1; cnt < argc ; ++cnt) { k = strlen(argv[cnt]); for(n = 0; n < k ; ++n) { argv[cnt][n] = argv[cnt][n] - 0x20; } } for(sort_cnt1 = 1 ; sort_cnt1 < argc ; sort_cnt1++) { for(sort_cnt2 = sort_cnt1+1 ; sort_cnt2 < argc ; sort_cnt2++) { if(argv[sort_cnt1] > argv[sort_cnt2]) { temp = argv[sort_cnt2]; argv[sort_cnt2] = argv[sort_cnt1]; argv[sort_cnt1] = temp; } } } for(pri_cnt = 0 ; pri_cnt < cnt ; pri_cnt++) { printf("\n%s",argv[pri_cnt]); } return 0; }
829 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:26:33 ] #include <iostream> #include <string.h> using namespace std; int main() { char str[256] = "<a href=\"localhost\ ">link</a>" "<a href=\"localhost\ ">link2</a>"; char *ptr; int i = 0; ptr = str; while(1) { ptr = strstr(ptr,"http://"); if(!ptr) break; ptr += 7; i++; } printf("http://の出現数は%dです。\n",i); return 0; } http://の出現回数を数えているのですが、 悪い点、改善点等のご指摘を下さい。
830 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:08:31 ] >>827 そのプログラムの目的と、どううまくいかないのかくらい書け。 >>829 お前もだ。 取り敢えず、C++ならstring.hではなくcstringをインクルードしとけ。 strの文字数は、その場合は自分で256に決めずにコンパイラに任せておけ。 流れを説明し易いように、iなんて変数名でカウントするのはやめておけ。 ptrを初期化しないで後から代入しているが、宣言時に初期化してしまえ。
831 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:51:15 ] 「g++43でコンパイルできないんだけど、どう修正したら いいの?」とかいう質問はここでいいんでしょうか?
832 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:16:36 ] いいよ もしソースが長いなら直接貼らずにどっかうpれ
833 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:19:07 ] >>831 他のコンパイラでコンパイルできると言うのなら、g++の問題だろうからgccスレがいいんじゃね? そうじゃなくて、たまたま使ったのがg++だと言うのなら、ここでもいいと思うけど。
834 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:39:27 ] >>833 「他のコンパイラ」のほうの問題かもしれないだろ C++だとそういうケースがよくある
835 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:01:39 ] upstreamの開発者の人にも一応pingは したのですが、 具体的には downloads.sourceforge.net/mecab/mecab-0.96.tar.gz をg++43でコンパイルしようとすると param.h:34: error: explicit template specialization cannot have a storage class というエラーが出てコンパイル出来ない、という問題です。 bugs.debian.org/cgi-bin/bugreport.cgi?bug=461727 (私自身はdebianのmecabのメンテナではありません)
836 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:03:21 ] 因みにg++41では問題ないです。
837 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:04:50 ] gcc.gnu.org/ml/gcc-patches/2007-06/msg01075.html g++の変更の論拠がここに書いてあるな。標準の7.1.1-1を見ると確かにエラーが正しいように見える 回避策は、 1. 単に32行目のstaticを削除する これでg++-4.3ではちゃんとstatic扱いになるはずだけど、g++-4.2だとそうならないので複数定義エラーになる 2. lexical_cast自体を非staticにする 別にこれをstaticにする理由はないと思うので、20行目と32行目のstaticを削る この場合、特殊化をヘッダに置いたままにしておくと複数定義になってまずいので、 ヘッダには宣言だけにして定義をparam.cppに移すか、あるいは単にinlineを付けるのでもいい 3. lexical_castを削除する grepしてみたら使われてないようなので
838 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:35:02 ] >>837 何だか32行目のstaticを外す方向がいい気がするけど (何で lexical_castがstatic扱いなのか今のところ良く分からない ので) そうすると確かにg++43ではコンパイルが通りますがg++41では 多重定義だといってはねられますね... lexical_cast自体はparam.hの後の方で使われているっぽいです。 1.か2,かの方向で検討してみます。有難うございました。
839 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:45:36 ] >>838 >lexical_cast自体はparam.hの後の方で使われているっぽいです。 見逃がしてた、ありがとう でも非staticテンプレートからstatic関数を参照するのはODR違反のような気がする lexical_castを非staticにするのが良いかと思う
840 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:51:25 ] char *p[10]; みたいなことをしたいのですが どうすればいいでしょうか?
841 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 07:35:55 ] >>840 それで正しい宣言になってる(pはchar *の配列)けど、何をしたいんだ?
842 名前:840 mailto:sage [2008/02/05(火) 11:02:37 ] >>841 ありがとうございます。 windowsプログラミングでエディットボックスの中身を 複数保存できるようにしたかったのでこのようなことが できるかわからなかったので質問させていただきました。
843 名前:デフォルトの名無しさん [2008/02/15(金) 17:21:49 ] メモリを確保し、 char *buf = (char *)calloc((int)dwSize+1,sizeof(char)); そこに、abcdefという文字列を入れます。 cの部分のみを読み取り、それがcであるか否かの判定をしたいのですが、 どうすれば出来ますでしょうか?
844 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:24:34 ] if(buf[2] == 'c') ... こういうこと?
845 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:28:45 ] for(int i=0; i<=100; i++) と for(int i=0; i<=100; ++i) の結果が違わないのは何故でしょうか
846 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:37:15 ] >>845 i++と++iは同じ副作用を持つから。 この二つの式は違う値をもつ(前者ならインクリメント前のもの、後者は後のもの)けど、 for文の三番目の式は、副作用だけ利用されて値は捨てられるから、この違いが現れない
847 名前:デフォルトの名無しさん [2008/02/15(金) 18:41:19 ] ありがとうございます。 >>843 です。 abcdefからbcを見つけ出しeまで抽出したいのですが、 どうすれば出来ますでしょうか?
848 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:49:22 ] >>847 char * pbc = strstr(buf, "bc"); if (pbc == NULL) ...; // not found. char * pe = strchr(pbc, 'e'); if (pe == NULL) ...; // not found. char newBuf[pe - pbc + 1 + 1]; sprintf(newBuf, "%.*s", pe - pbc + 1, pbc);
849 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:11:42 ] >>846 なるほど 後者は0に+1されてからiが代入されて 1からループが始まるのかと思ってました ありがとうございました
850 名前:デフォルトの名無しさん [2008/02/16(土) 00:29:08 ] 本当にありがとうございます。 解決しました。 buf[2]のみをダイアログ上のエディットコントロールに対し、 SendDlgItemMessageを使い書き込みたいのですが 出来ません。 どうすれば出来ますでしょうか?
851 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:11:10 ] >>850 「ありがとう」と言われても、あんたが何者なのか誰も知らんから誰にも伝わらんぞ。 で、3行目以降についてもいきなり書かれても何のことやら判らん。 状況説明もできないのなら、なにもできるわけないだろ。
852 名前:デフォルトの名無しさん [2008/02/16(土) 02:24:07 ] 状況説明 SendDlgItemMessageでエディットコントロールにbuf[2]を送ったが エディットコントロールに文字列が追加されない。
853 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:16:18 ] ・環境は? ・buf[2]ってなに? ・SendDlgItemMessageをどう使って送ったの? ・あんた馬鹿?
854 名前:デフォルトの名無しさん [2008/02/16(土) 03:59:08 ] >>853 WindowsXP bufについて>>843
855 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:30:26 ] 実際のコードを貼らない質問者なんてスルーでいいべさ。
856 名前:デフォルトの名無しさん [2008/02/16(土) 15:17:30 ] わかりました。 簡略化したコード char *buf = (char *)calloc((int)dwSize,sizeof(char)); ↓ ReadFile(hFile,buf,dwSize,&numOFRead,0);//ファイル内容abcde ↓ SendDlgItemMessage(hWndDlg,IDEDIT, EM_REPLACESEL,0,(LPARAM)((LPSTR)buf[2]));
857 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:27:01 ] >>856 buf[2]は'c'という文字であって"c"という文字列じゃないから、それは動かない まず"c"という文字列を用意して、それを渡す char content[2]; content[0] = buf[2]; content[1] = '\0'; SendDlgItemMessage(hWndDlg, IDEDIT, EM_REPLACESEL, 0, (LPARAM)content);
858 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:29:42 ] SendDlgItemMessageAを使った方が、って書こうと思ったけど、 comctl32.dllバージョン6だと、それはそれで面倒なことになる気がするから、書かないでおく。
859 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:26:08 ] 皆様へ ありがとうございます!!
860 名前:デフォルトの名無しさん [2008/02/16(土) 16:31:38 ] csvファイルを読み込んで任意の値で描画する方法を教えてください。 CSVは x,y,value\nで数百行。 二次元配列 M[50][50] ///max 二次元配列 M[X][Y] にcsvのxをX,yをYでセット 二次元配列 M[x][y] にvalueを代入 ※x,yはint valueはstr6バイト forループでM[X][Y]を0,0から49,49までvalueを表示させる。 ※空値の場合はカンマをセット イメージ aaaba,,,bbbb,,,,,,,,,asdass,,,,・・・ cccdse,,,,,,,,,,,,,,,,,,,,,,,,,,,bnvmde,,・・・ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bredkgalkser,・・・ ,・・・ @ファイル読み込み Ax,y,valueセット B描画 ↑ Bの描画でvalueがAで最後にセットされた値しか出てきません。 どなたか教えてください。
861 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:36:29 ] >>860 丸投げしたいなら宿題スレへ、ヒントが欲しいなら質問箇所を絞って、エスパー希望なら鼬害。 >860=>859なら死ね。
862 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:35:00 ] >>861 死ねよ低モラル野郎
863 名前:デフォルトの名無しさん [2008/02/22(金) 22:31:23 ] C99のinlineがc++のinlineと違うのでむかついた
864 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:46:04 ] >>863 どこがどう違うの?
865 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:59:46 ] int array[3] = { 0, 1, 2 }; この配列の array[3]の中身がNULLというのは保証されていますか? 違いましたらforeachって、どういう中身になっているのか教えてください
866 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:15:10 ] array[3]は存在しません アドレスは取れますが、参照しようとしたり代入しようとすると未定義動作 foreachって何の言語よ?
867 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:18:25 ] 何の言語でも、array[3]へのアクセスができない言語なら 配列の要素数が3であるということを把握してループしているだろうということは容易に想像できる。
868 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:23:44 ] C#じゃねーの?
869 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:33:19 ] >>865 C#なら配列の長さを調べることができるから for (int i = 0; i < array.Length; i++) { 〜 } ってやればいいんじゃね
870 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:07:04 ] そもそもarray[3]はポインタじゃないのに何でNULLになるんだよ…
871 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:10:44 ] たぶんあちこちでNULL文字とかNULL終端といった言葉が使われてるせいかと
872 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:55:05 ] 糞入門書の弊害か… ASCIIの0の略語はNULLじゃなくてNULだな。 ja.wikipedia.org/wiki/ASCII#ASCII.E5.88.B6.E5.BE.A1.E6.96.87.E5.AD.97 混乱起こすから「ヌル文字」とか区別して書くべき。
873 名前:865 mailto:sage [2008/02/23(土) 16:21:31 ] >>867 3個である事を前提にループさせるんですね 発想が悪かったみたいです。。。 終端ばっかり調べようとしてました 配列のサイズ取得して割ったら出来ました ありがとうございます
874 名前:デフォルトの名無しさん [2008/03/06(木) 22:24:02 ] サイトからダウンロードしたMicrosoft Windows SDKのIMGファイルが1.32GBもあって大きすぎてCDに入らないんですけどどうやってインストールするんですか??
875 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:26:53 ] 300行で1つの関数と、それと同等の処理を30行の関数が100個で構成するのとでは何が違うのでしょうか? スタックがどうのこうのとブツブツ上司が呟いたのだが、なにが問題なのでしょうか
876 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:48:44 ] >>874 Daemon ToolsでマウントするとかDVDに焼くとか。
877 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:52:01 ] >>874 CDじゃなくてDVD用でしょそれ
878 名前:300 * 1 < 30 * 100 mailto:sage [2008/03/07(金) 01:04:42 ] >>875 プログラムの規模が違う。
879 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:49:11 ] その関数が呼び出されてスタックに詰まれる量が違う 300行分のコードが詰まれるのと 30行分のコードが詰まれるかの違い けど、其れだけでブツブツ言うとも考えにくいので 他の問題があったのではと予想 明日聞くんだな
880 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:48:30 ] >300行分のコードが詰まれるのと >30行分のコードが詰まれるかの違い はぁ? コードが詰まれる? どこの実装ですか? おたくさまの脳内?
881 名前:デフォルトの名無しさん [2008/03/08(土) 20:35:29 ] int *ptr; int array[10]; for(ptr=array; ptr<array+10; ptr++) { *ptr = 0; } array+10は何を表しているのですか?
882 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:39:22 ] arrayの終端。
883 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:23:37 ] >>880 そんな質問の仕方じゃ答えてあげないよ とりあえず関数作って自動変数のメモリを表示させて確認する作業に戻るんだ
884 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:39:23 ] そりゃ自動変数は積まれるだろうよ コードが積まれるってのは訳分からん
885 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:11:31 ] なんだ、>879の阿呆は未だ自分の間違いに気付いていなかったのか。 とっくに尻尾を丸めて引き篭もっているのかと思った。
886 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:15:35 ] コードを詰む=スタックに実行アドレス(IP)を詰む という意味なら通じるが、普通コードを詰むとは表現しないな
887 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:28:02 ] >>886 詰むなよ。ゲームオーバーじゃねぇか。
888 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:58:55 ] んあ? よくわからない コードをじゃなくて 「実行アドレスを積む」なら俺リアルで恥かかない・・・? コードって全体をさしてるものと思ってたんだけど。 処理のみの部分をいうのかな
889 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:26:33 ] 実際に実行命令をスタックに積んでるわけじゃないから
890 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:05:39 ] ほんとはよく知らないんですよ 誰も質問答えないのに見かねてしまった ごめんね、適当答えて。 まとめると 関数に入ったら 変数はスタックに詰まれる 処理はスタックに詰まれない てことですね ( 信じるかどうかは貴方次第! 掘り返し875の違いを、ソースを見ずに言える事は、 やはり上司に聞けとしか、言えないですね
891 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:08:55 ] >>890 >878は読めないんですか? 特に名前の辺りは。
892 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:13:17 ] 例えばgooなどでああいう回答してもポイント貰えませんよ 自分はそんな目的ではありませんけども
893 名前:デフォルトの名無しさん [2008/03/12(水) 08:20:49 ]
894 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:22:47 ] でもコード量が十倍も違うなら、それが一番重要な差異だろ
895 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 08:59:59 ] >>893 可能です。 以上。 ↓次どうぞ
896 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:20:29 ] VC++.NET の質問良いでしょうか? 1.UAC ダイアログを「インストール」ボタン押下時にのみ出したい 1つの EXE でWindowsサービスのインストール、アンインストール、 Windowsサービスの実行の機能を入れたんですが、 VISTA のユーザーアカウント制御機能(UAC)のせいで、 「管理者で実行」でプログラムを立ち上げないと上手く動きません。 フォームの「インストール」ボタンをクリックした時だけ ユーザーアカウント制御のダイアログを出すように出来ませんか? 常時Admin権限で動作ってのも都合悪いのですが・・・ ユーザーに Admin 権限を持つのユーザー名、パスワードを入れて下さい、 なんて画面を作った所で「???」だろうし ( VISTA インストール時に Admin パスワード入力しませんものねぇ。) 2.Windows サービスの設定ファイル、XXX.ini ってどこに置けばいいんですか? VISTA だと users 以下に入っちゃう空気ですが、exe と 同じ位置だとNG? PC汚染を覚悟の上で windows 以下に入れるのが良い?? 教えて君ですがよろしくお願いします。 UAC の情報ねーんですよぉぉぉ!!(絶叫
897 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:40:07 ] >>896 1 任意のタイミングで昇格は不可能ではないが、面倒そうなんで、 管理者権限が必要な部分だけ別プロセスにすることを勧める。 2 複数ユーザが同時ログオンしたら破綻するという点で、 Windowsフォルダもアウト、常考。
898 名前:デフォルトの名無しさん [2008/06/15(日) 12:50:03 ] スタックに関してよくみかける記述について1つ疑問。 1)スタックはLIFO(Last In First Out)方式であり 後に入れたデータから先に読みだされる 2)関数の引数及びローカル変数はスタックに積まれる さて、問題。 int add(int a, int b) { int c; c = b; c = a+c; return c; } という関数があった場合、スタックにはこのように データが積まれると考えられる。 変数 c (ローカル変数) 変数 a 変数 b (最後の引数から積まれる) (スタック領域の先頭アドレス) 1)に従えば、データはc->a->bの順番でしか取り出せない はずだが、プログラムでは明らかにaより先にbの値を参照 して値を読みだしている。これはスタックのルールに 反するのではないか? あなたはこの疑問を明確に説明できますか?
899 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:33:21 ] >>898 int add(int a,int b); では、内部的に struct { int a,b; int c;//ローカル変数用 }add_param; を積んでるんだと考える。 スタックに一度に積めるデータの単位は別に固定じゃない スタックは抽象概念だからね。
900 名前:898 mailto:sage [2008/06/15(日) 13:52:30 ] 899さんの考えではint型変数a,b,cを含んだ構造体を一度に PUSHしたから、取り出すのも同時にPOPできる・・・だから 変数を使用する順番は関係ないのだ、とこういう理屈でしょうか? そうだとしたら何かおかしくありませんか? ヒントですが898の日本語の文章はわざと誤解を生じるような 表現が使われています。スタックの本質は、PUSHにしろPOPに しろ、それは必ずスタックポインタの遷移を伴う操作でなければ ならないということです。POPするということはスタックから データを取り除く、つまり”そのデータはもう使わないよ” という意味ですよね? さて、898で私が書いた"値を参照" する行為は果たしてPOPでしょうか? ここをじっくり考えると何が問題だったか見えてくると 思いますよ。
901 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:04:38 ] 何かおかしくありませんか?と書いてどこがおかしいのか指摘しないのはどうよwww ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで
902 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:06:55 ] 寧ろ、struct {int a, b;}をスタックから取り出していると捉えてもいいかもしれない。 その後の仮引き数やローカル変数がスタックに積まれるかどうかは実装依存だし。
903 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:20:03 ] スタックといっても色々あって、pushされたら、popするまで 一切アクセスすることが出来ないものもあれば、アクセスでき るものもある。 Cの関数の引き数用のスタックは、当然アクセスできるタイプが 使われる。問題はスタックポインタをどうやって関数は知らされたか だが、まぁ隠しグローバル変数(register属性)とでも思って桶
904 名前:898 mailto:sage [2008/06/15(日) 14:34:42 ] >>ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで こういう中途半端な理屈で自分を納得させて学習を止めてしまうのが 一番良くありません。疑問があれば納得するまで調査するべきです。 私はCを勉強したての頃に前述の疑問を持ちその理由がよく説明 できませんでした。そこで自分なりに調べた結果、出した結論が 以下の答えです。 1)スタックはLIFO(Last In First Out)方式であり 後に入れたデータから先に読みだされる という記述の”読みだされる”というのがあたかもPOP をしたかのように誤解を与える記述ですが、実際は内部の 動作としては”値を読みだす(参照する)行為”は”POP操作” ではありません。スタックポインタが移動してないからです。 (続く)
905 名前:898 mailto:sage [2008/06/15(日) 14:35:26 ] 898のスタック構造は若干、はしょった部分があり正確には 関数add()内部でのスタック構造はこんな感じになります。 ebpレジスタ 変数 c (ローカル変数) 関数の戻り先アドレス 変数 a 変数 b (最後の引数から積まれる) (スタック領域の先頭アドレス) そして関数内部ではesp(スタックポインタ)を一旦ebpレジスタ に格納したうえで(アセンブラではmov (ebp,esp) )、変数a,変数b への参照を以下のように行っています。 変数a dword ptr[ebp+12] 変数b dword ptr[ebp+16] 変数c dword ptr[ebp+4] add()関数内部の処理はこれらをアキュムレータで演算しているに 過ぎません。 (続く)
906 名前:898 mailto:sage [2008/06/15(日) 14:37:19 ] 関数を抜けるときに初めてPOPが行われます。 1)変数cをPOP 2)POPで呼び出し元に復帰 3)変数aをPOP 4)変数bをPOP ※実際にはPOPを行わずにスタックポインタの値を進める事で 代用する場合が多いです。 結局、関数の中でスタックに積まれた引数やローカル変数の値 を使用することはスタックからそのデータを取り出した(POPした) わけではないのだから、スタックの定義と全く矛盾しませんよ ということを言うためにこんなまわりくどい説明をしました。 でも、案外誤解している人って多いかもしれないと思います。 なお、これらは日経BP社の「プログラムはなぜ動くのか」という 本の第10章「アセンブリ言語からプログラムの本当の姿を知る」 を読めば完全に理解できると思います。 (終)
907 名前:898 mailto:sage [2008/06/15(日) 14:58:50 ] >>903 ここはCに関するスレッドなので、スタックの概念や実装についても Cの範疇でのみ回答しております。
908 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:00:23 ] >>904-906 だから、その話を踏まえて「似ているが別のもの」って言ったんだよ Cの普通の実装で使われる呼び出しスタックは、配列上に構築したスタックと同じで、 スタックポインタからのオフセットを指定することで任意の要素のO(1)読み書きができるけど、 これは「スタック」というデータ構造が元々持ってる機能ではないってこと 基本的な意味でのスタックでは、値を取り出すにはpopするしかない そこを混同してると>>898 みたいな疑問が生まれる
909 名前:898 mailto:sage [2008/06/15(日) 15:12:50 ] あらま、詳しいお方でしたのね。失礼。
910 名前:ebpなんて、極一部のCPUにしかないレジスタ持ち出すなよpgr mailto:sage [2008/06/15(日) 15:19:18 ] つーか、Cの仕様レベルでの話に実装を持ち出す>905はいかがなものかと。
911 名前:898 mailto:sage [2008/06/15(日) 15:55:18 ] >>910 正論だ。まったくもって正論だ。 「プログラムはなぜ動くのか」の本にもPentiumなどのx86系 マイクロプロセッサ用アセンブリ言語を対象として解説する って書いてあった。どんなレジスタが使われるかはコンパイラ 依存だとも・・・。説明不足でした。まあ実装はちょっと置いといた としても、なぜに「スタック」という名前なのに下のデータにアクセス できてしまうのかという疑問については解決ってことで...(苦しい)
912 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:44:45 ] ポーランド記法で計算を行う為のアルゴリズムを教えてください。
913 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 08:28:06 ] CPUのスタックはスタックポインタいじればどこでもアクセスできるだろ 引数の渡し方も呼び出し規約で変わる fastcallだとレジスタ渡しだし
914 名前:デフォルトの名無しさん [2008/06/16(月) 17:48:41 ] C#での質問です。 string[] str = new string[10]; char[,] moji = new char[10,30]; このstrにファイルを読み込んで文字列として格納したものを、 mojiにコピーするにはどうしたら良いのでしょうか? ToCharArray()を使おうと思ったのですが上手くいかずに困っています。 どなたかご鞭撻の程宜しくお願いします。
915 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:15:25 ] ここがC#のスレッドに見えたんだろうか。
916 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:37:02 ] >>915 >>1 を見ればC#スレにしか見えないだろ。 >>914 ジャグ配列で良ければ、ToCharArrayが使える。 矩形のchar[,]でないといけないなら、自分でループ回す方法しか俺には思い浮かばない。 char[][] moji = new char[str.Length][]; //別にnew char[10][]でも for (int i = 0; i < str.Length; i++) { moji[i] = str[i].ToCharArray(); }
917 名前:914 [2008/06/17(火) 09:18:37 ] >>916 さん わざわざお答え頂きありがとうございます。 なるほど、出来なかった理由は宣言の時点での間違えだったのですね。 大変助かりました。
918 名前:914 [2008/06/17(火) 17:11:58 ] 連投してすみません; 914の者ですが 配列mojiにstring型の文字列を格納することは出来たのですが、 もう一つmojiと同じ方の多次元配列を用意して、 それにmojiをコピーしたいのですが上手くいきません; Array.Copyなどを使えば動作はするのですが、配列の中身が変わっておらず どうすればいいのか分かりません。 度々すみませんが、宜しくお願いします。
919 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:45:18 ] >>917 いいえ、「間違え」ではありません、「間違い」です。
920 名前:914と918 [2008/06/18(水) 16:53:48 ] 918のものですが自己解決しました。 お騒がせしてしまい、すみません; >>919 おぉ、確かに間違えてる; ご指摘どうも。