1 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 13:10:57 ] このスレは標準Cのみの限定スレです。 まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 pc11.2ch.net/test/read.cgi/tech/1170338926/ GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.42【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1188748806/ C/C++の宿題を片付けます 95代目 pc11.2ch.net/test/read.cgi/tech/1187944110/ 【このスレ住人としての心得】 ビットシフトはなんの役に立つのでしょうか でググれ
562 名前:デフォルトの名無しさん [2007/12/18(火) 03:45:39 ] mallocで確保したメモリを、100x200の2次元配列だとおもってa[m][n]のようにアクセスしたいので、 int* p = (int*)malloc(100*200*sizeof(int)); ... typedef int A[100][200]; A* a = (A*)p; のようなコードを書いたのですが、これだと使うときに(*a)[0][0]のように*が必要になってしまいます。 どうにか、*を使わずにa[0][0]のように書く方法はないでしょうか。 C++はNGです。
563 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 03:56:03 ] >>562 int (*a)[200] = (int (*)[200])malloc(sizeof(int[200]) * 100); typedef int A[200]; A* a = (A*)malloc(sizeof(A) * 100);
564 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 08:57:51 ] int (*a)[200] = malloc(sizeof(int[200]) * 100); これでいい
565 名前:デフォルトの名無しさん [2007/12/19(水) 23:21:25 ] VC++のstrstr系関数って、KMP法とかBM法で実装されてるんでしょうか? それと、もし自分で実装するとしたらですが、KMPとBMのどちらが評判よいですか?
566 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:35:28 ] お帰りください
567 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:44:40 ] たぶんそんなのは使っていないと思う。 あまりにも短い文字列などだとかえって時間かかるから。
568 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 02:59:48 ] 絶対使ってない、と言い切れるね。 1回しか使わない探索にテーブルのセットアップとかが無駄と言うのもあるけど そもそも、そういうスキップする(全文字走査しない)アルゴリズムは テキストの長さがあらかじめ判ってないと使えない。 そして、(strstrに渡す)文字列の長さをstrlenで調べてからBM法を使うくらいなら 長さを求める'\0'探しのついでに力任せ探索をするほうがずっとまし。 たとえ同じ文字列を何回も探索するような、初期化が必要ないケースでも。
569 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 00:21:03 ] ビット操作の練習をしています。符号あり2の補数表現の整数の符号を反転するコードは、 x=(~x)+1;とx=~(x-1);のどちらが適切でしょうか?
570 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 01:38:53 ] x=-x;
571 名前:何を以って適切とするかが提示されていないから答えようがない罠 mailto:sage [2007/12/21(金) 01:39:24 ] >>569 x *= -1;
572 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 04:13:19 ] このスレ的には2の補数表現を仮定してる時点で間違い
573 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 09:58:35 ] >>572 は誰に言ってるのか
574 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 10:09:03 ] >>573 >>570-571 ではなかろうか
575 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 10:12:04 ] 俺は>>569 だと思った
576 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 11:02:23 ] >>569 xがunsignedならどっちも同じになるから、どっちでもいいよ。
577 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 11:52:01 ] >>576 符号ありと書いてあるが。
578 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 11:56:24 ] んー微妙だなw
579 名前:デフォルトの名無しさん [2007/12/21(金) 13:00:08 ] 構造体の定義で、たまに struct X { ... char tag[1]; } とか書いてあるものがありますが([0]の場合もあり)、これは何でしょうか?
580 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:08:33 ] >>579 www.kouno.jp/home/c_faq/c2.html#6
581 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:11:49 ] C FAQ 次スレからテンプレに入れよう
582 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:13:08 ] >>581 >>1 にあるだろ。テンプレ嫁
583 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:15:32 ] あ、見落とした m(__ しかし、それが何であるかの説明にはなってないなw しかしこのスレではスレ違いなので、 スレ立てるまでもない質問のほうに答えは書いておく。
584 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:57:03 ] どうせ規格の話になるんだし、ここで答えてもよかっただろうに。 分散して見づらくなる。
585 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:23:06 ] 心得の意味がわかってないやつがいるなぁ 「わざとスレ違いな質問をする荒らしがいるのでそういうのは無視するか軽く流してください」 次からこう書かなきゃダメか?
586 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:34:52 ] 何でスレ違いなのか、さっぱりわからない
587 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:42:27 ] >586 どの質問についての話なのかさっぱりわからない >579についてのことなら、プログラム技法の質問であって規格の質問ではないからだ
588 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:43:51 ] え、いつからこのスレは規格オンリーなスレになったんだ?
589 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:43:54 ] 何でしょうかって聞かれたらそれは 要素数が1のcharの配列です としか答えられんよな
590 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:44:56 ] >>587 規格に準拠したC言語に関するスレであって、規格のスレではなかったはずだが。
591 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:45:53 ] だから>>579 に対する答えは>>589 で終わりだ
592 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:46:23 ] >>2
593 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:47:40 ] >>587 みたいなキチガイが湧くから>>2 の注意書きがあるってのに…
594 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:49:45 ] なんなの、この自治厨
595 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:51:46 ] なぜ「だから」なのか、さっぱりわからない
596 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 15:03:45 ] ざっとこのスレ見直したけど、いかにも>>587 の気に食わなさそうな話題がたくさん見逃されてるよ。 何故?
597 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 15:05:58 ] なんかいろいろ言われてるけど pc11.2ch.net/test/read.cgi/tech/1196509846/552 結局なぜ、こういう使いかたをするのかわからない
598 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 15:08:10 ] >>597 向こうで聞け
599 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 15:17:17 ] この書き方が文法的に正しいかも移植性が高いのかもともにはっきりしない。ただし、かなり幅広く使われている。この技法による実装は以下のようになる。 #include <stdlib.h> #include <stdio.h> struct name *makename(char *newname) { struct name *ret =malloc(sizeof(struct name)-1 + strlen(newname)+1); /* -1 は頭の [1] 用; +1 は \0 用 */ if(ret!=NULL){ ret->namelen = strlen(newname); strcpy(ret->namestr, newname); } return ret; } 上の関数は、name 構造体の実体を、引数で要求された名前を保持できるように(構造体の定義から想像する1文字ではなく)大きさを調整して割り付ける。 幅広く使われているけれど、この技はいささか悪名高い。…… 以上、CFAQ初版より抜粋
600 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 16:48:26 ] なんで、 struct name { int namelen; char *namestr; }; にしないんだろう?二回malloc/freeするのがイヤってことなのかな。
601 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 16:58:54 ] ファイルの入出力も1回で済んだしな
602 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 17:05:11 ] >>600 そのまま通信用バッファとかに使えるから、流行ってたんだと思う。
603 名前:デフォルトの名無しさん [2007/12/21(金) 17:21:32 ] CG法のプログラムを完成させ、以下のA,bに対する解xを求めよ。 A: -6.761582e-01 8.649824e-01 5.974179e-01 1.510212e-01 9.412452e-01 8.649824e-01 -9.466491e-01 9.172758e-02 9.491567e-02 3.673389e-01 5.974179e-01 9.172758e-02 8.015639e-01 -7.419281e-01 2.099383e-03 1.510212e-01 9.491567e-02 -7.419281e-01 -2.940182e-01 -6.722990e-01 9.412452e-01 3.673389e-01 2.099383e-03 -6.722990e-01 -8.416333e-01 b: 8.156371e+00 1.463224e+00 2.283493e-01 -6.422500e+00 -5.215142e+00 これってどうやったらできるんですかね?(>。<) cg法自体よくわかってないんですが…
604 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 17:22:17 ] これこそ、正にスレ違いだな。
605 名前:デフォルトの名無しさん [2007/12/21(金) 17:26:04 ] 連立方程式の開放の一つだろ
606 名前:デフォルトの名無しさん [2007/12/21(金) 17:35:03 ] ja.wikipedia.org/wiki/%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95
607 名前:デフォルトの名無しさん [2007/12/21(金) 17:38:06 ] Lesson6 連立方程式-大規模疎行列-(不完全Colesky分解) Lesson7 連立方程式-大規模疎行列(前処理つきICG法) www.saitama-u.ac.jp/hiyama/suchi2.htm
608 名前:597 mailto:sage [2007/12/21(金) 17:44:58 ] >>599 なるほどーよくわかりました。 やっぱり、>>600 のように書いたほうがいいですね。
609 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 17:45:59 ] 共益勾配法のことか。 なつかしー。BCG法とかもやらされたなあ・・・
610 名前:デフォルトの名無しさん [2007/12/21(金) 19:49:22 ] 処理系依存の話ではなくANSI Cとしての話ですが、 シフト演算で、シフト量が0の場合の挙動は定義されているのかな? それとも未定義? int x; x>>= 0: x<<=0; とかした場合
611 名前:デフォルトの名無しさん [2007/12/21(金) 19:53:12 ] 変化無し
612 名前:610 mailto:sage [2007/12/21(金) 20:16:42 ] >>611 どもです。 ANSI C ( JISX3010) www.jisc.go.jp/ をぱらぱら読んでみましたが、 6.5.7 ビット単位のシフト演算子 を読む限り、負数の場合は未定義とはありますが、0に関しては 特に述べられてませんね。 どの処理系でも (x >>= 0) == x (x <<= 0) == x と想定してFA?
613 名前:デフォルトの名無しさん [2007/12/21(金) 20:22:21 ] c<<(m-n) という式ではm-n=0という場合もある
614 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:50:39 ] >612 x >= 0 ならね。厳密に解釈するなら x < 0 なら << は未定義、>> は処理系定義。
615 名前:610 mailto:sage [2007/12/23(日) 23:40:58 ] >>614 どうもです。でしたらunsigned int なら大丈夫ですね。
616 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:54:53 ] >>599 あたりの話なんですが、 なぜこの技法はだめなんですか? 特に問題なさそうに思えるんですが
617 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:59:05 ] C89の規格に「やってもよい」と明記はされてないから。C99なら問題ない。
618 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 00:03:12 ] 規格を厳密に解釈すると、駄目ということになるから。 www.kouno.jp/home/c_faq/c2.html#6
619 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 00:14:46 ] Windowsもbitmap周りでやってたな
620 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:56:51 ] C99 ならサイズ無しで書いとけば可変長メンバが使えるようになったね。
621 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:19:28 ] >>617 ahosugi
622 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:21:23 ] >>620 なんで何度も出てることを新しい情報のように紹介してくれるの?
623 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:32:47 ] 安部さんが首相を辞任したね
624 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:47:43 ] 中日ドラゴンズが日本一になったね
625 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:53:53 ] C99対応のコンパイラってGCCぐらいかな?
626 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:55:47 ] GCCがC99に対応したね
627 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:56:34 ] そう。でもGCCでも完璧に対応してるわけじゃないけどね。 ttp://gcc.gnu.org/c99status.html
628 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:09:16 ] DMCをお忘れではありませんか。 こっちも完璧ではないけどね。
629 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:12:56 ] VCも少しは見習え
630 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:48:35 ] 数年前のC99をいまだ対応させないコンパイラって・・・ 昔との互換性?それとも技術的に改良部分が多いのか?難しいのか? よくわからないけど
631 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:50:12 ] そりゃC99に対応させても努力が多いわりに実入りが少ないなら 当然じゃない?ビジネス的にはC++かC#を使ってってこと。
632 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 13:02:19 ] iccはc99だし、SunWorksのccもc99だけどね。
633 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 13:20:11 ] >>629 620は、少なくともVC++ 7.1以上なら独自拡張扱いで使える。 msdn2.microsoft.com/en-us/library/34h23df8 (VS.71).aspx
634 名前:デフォルトの名無しさん [2007/12/24(月) 21:17:49 ] fread関数でサーバーにあるファイル(ファイルサイズ1G)を読む際、 読込みサイズを32*1024*1024にするとエラーがおきなくて、 読込みサイズをファイルサイズにするとエラーが起きるのはどうしてでしょうか ? どなたかご教授下さいm(_願_)m
635 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:21:44 ] そんなに大量のメモリをいっぺんに確保できていないのだろう。
636 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:23:47 ] エラーってなんだよ
637 名前:デフォルトの名無しさん [2007/12/24(月) 22:07:40 ] 634です。 スレ違いでした。失礼しました。
638 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:36:13 ] 規格の話以外はスレ違いだと騒ぐのに、コンパイラの話になると嬉々として話題に加わる
639 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:49:57 ] >>638 なんでそう必死なんだ。
640 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:52:13 ] コンパイラの規格準拠度なんて、まさにこのスレの守備範囲だろ。
641 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:23:25 ] 実装に特化したスレってあったっけ?
642 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:23:58 ] ↑「実装すること」に特化した
643 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:27:32 ] 「コンパイラ・スクリプトエンジン」相談室12 pc11.2ch.net/test/read.cgi/tech/1188688416/ とかか?