1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/
804 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:06:17 ] doxygen destroyer
805 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:19:56 ] >>804 pc11.2ch.net/test/read.cgi/gamedev/1238520070/692 692 :名前は開発中のものです。:2009/06/09(火) 00:57:34 ID:2fI/sHFo 何言ってんだ。プログラマにまともな精神持った奴がいた試しなんてねえよ。 第一プログラマと精神科なんてほとんどセットなのに今更それを語るとか情弱以下だろ。
806 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:31:40 ] C言語をやりたいんだけど Microsoftのc++ExpressEdition ってのでもできますか? #include <stdio.h> int main(void){ printf("aaaa"); return 0; } みたいなのもちゃんとできますか?
807 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:09:32 ] >>806 Microsoft Visual C++ 2008 Express Edition の事ですね。 可能です。 ですが、最初はコンソールの方が分かりやすいと思いますよ。 C/C++初心者なら bcc5.5.1+bcc developer がなかなかオススメ。 エラーメッセージが分かりやすいので。 複雑なテンプレート等、まともなC++をやりたくなったらその時初めて Microsoft Visual C++ 2008 Express Edition gcc3.x, gcc4.x などを試せば良いかと思います。
808 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:19 ] まあ鼻から悪魔が出ることは無いと断言できる
809 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:37 ] C/C++というよりLinuxの質問になってしまうのですが、 mq_sendとmq_receiveでメッセージキューのパラメータに 任意の構造体を渡すことはできますでしょうか? 関数仕様ではchar*のみのようですが。 メッセージキュー以外の方式で別プロセスに任意の型の 値を渡す代替案があればそれでも良いのですが。
810 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:10:40 ] mmapとかpipeとか プロセス間通信は、Linuxの方で聞いた方がいいかもね
811 名前:デフォルトの名無しさん [2009/06/09(火) 16:13:22 ] 使ったこと無いけど 文字列にシリアライズして渡すんじゃねーの そんな雰囲気のある関数っぽい
812 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:07:30 ] >>809 昔は, 任意のバイト列に対するポインタは char* を使っていた で, 関数使用はその名残だと思うんだわ # kernel 内部の caddr_t とかの絡みもあるとは思うが……… 構造体とか配列とかもバイト列として表現できるわけだから, キャストすれば何でも可
813 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:35 ] >>812 × 関数使用は 〇 関数仕様は
814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:27:02 ] なるほど、ありがとうございます。 mmapとかの共有メモリがお手軽そうですね。 >>812 やはりできるんですね。やろうとしてsegvでちゃったん ですが、できるとわかればもうちょっと調べてみます。
815 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:29:28 ] vectorのmax_size()って中の人はどうやって計算してるの?
816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:51:40 ] bad_alloc出した場合って普通何をするもんなのかな ・APIとかで開いた画像ファイルとかを閉じる ・そのメソッドで確保成功した分のメモリを開放する ・そのメソッド内での仕事が完了したらbad_allocを上に投げる ・再帰的に開放作業を繰り返して、一番上でプログラム終了 とかでいい?
817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 18:01:25 ] >>815 gcc 4.1は単にsize_type(-1) / sizeof(value_type)を返してた。 VC2008は、上の値とアロケータの最大サイズと比較してちっさい方返してた。
818 名前:デフォルトの名無しさん [2009/06/09(火) 19:52:52 ] void Initialize(){ ここで配列を5本動的確保 } そしてこの関数で使いたいんですがどうすればいいですか? void calc(){ } calcは何度も呼び出すのでcalc内で動的確保するのは無駄だと思いました。
819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:03:38 ] template <typename _T,int _Size> class hoge { private: std::vector<_T> _vec[5]; public: void Initialize(void) { for(int i=0;i<5;++i) _vec[i].reserve(_Size); } void calc(void) { 以下略 };
820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:09:32 ] vectorとかのコンテナのサイズを変えるときはtry-catch(bad_alloc)したほうがいいの?
821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:17:52 ] >>819 できればSTLなしで・・・
822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:48:36 ] >>821 お前の質問に対する答えが>>819 なわけだが、STLがその答えの本質じゃないことぐらい判るだろ。 コードを一から書いて欲しいなら宿題スレ行ってこいよ。
823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:17:14 ] 内容がC++からちょっとずれますがお願いします。 大学ではじめてのC++で勉強しているのですが、phpの初心者向けサイトで コードをみたところc++と似ていて驚きました。c++はphpにも応用が利くと聞いたのですが、 C++をどの程度できるようになればphpでも簡単なwebサービスをできるでしょうか?
824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:32:03 ] C++をいくら極めてもwebサービスはできんじゃろ。 なんせ標準ライブラリにwebに関するものはまったくはいっとらんからな…。
825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:33:51 ] >>821 STLなしでとか何言ってるの? まさかSTLない環境でやってるわけじゃなくて知識がないだけでしょ? ちょっとで良いから勉強しろよ。
826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:34:11 ] >>814 Linux の実装はしらんが, Solaris とか *BSD とかの実装だと, mq_send で msq_ptr からサイズ分 kernel 内バッファにコピーして, mq_receive で該当領域を読み出し側にコピーする で, kernel は該当領域にアクセス可能か否かの test 程度は行っている ので, とんでもない引数を与えると EINVAL か何かが返るはず segv が発生するのは, mq_receive で, msq_ptr として与えた領域サイズより 大きな msg_len を与えてスタック書きつぶしたときくらいじゃ内かな?
827 名前:デフォルトの名無しさん [2009/06/09(火) 21:34:16 ] 文字処理が面倒だけど cgiで起動すれば出来るんじゃね。
828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:36:02 ] 0から99までの乱数を表示するプログラムを作ったんですが、コンパイルしたらまた新たな乱数を表示するにはどうすれば良いのですか?
829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:42:11 ] >>828 乱数系列切り替えればええんちゃうの?
830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:44:31 ] 時刻でも乱数シードに使えばいい
831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:46:56 ] >>828 乱数の生成方法によって違うけれど乱数の種を設定できる仕組みがあるはずだからそれで種を変更する。
832 名前:デフォルトの名無しさん [2009/06/09(火) 21:50:14 ] >>829-831 ありがとうございます。 すいません。 かなり初心者なので、出来れば、詳しくお願いします。 今main関数の中が cout<<rand()%100<<endl; だけなんですが、何かつけ加えますか?
833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:17 ] >>832 そうゆう話なら取りあえず処理系の名前を書け
834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:55 ] ↓以下乱数の質について
835 名前:デフォルトの名無しさん [2009/06/09(火) 21:56:53 ] 箱を開けたら猫
836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:58:12 ] >>833 bcc32です。
837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:06:15 ] メルセンヌツイスタでぐぐるといいよ
838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:10:23 ] >>836 けっして誉められた手法ではないんだろうが おそらく sland(time(NULL)) とかやっとけば? >>834 が期待してるように 用途に応じて生成される乱数の品質とかアルゴリズムとかが問題になる 置くの深い部分だけどな
839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:18:59 ] 標準の乱数は大きな素数を割ってるだけみたいな単純な実装なので それをそのまま使うとカルドセプトサーガみたいなことになるかもね♥
840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:25:25 ] >>838 ありがとうございます。 やってみます。
841 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:31:08 ] >>837 ありがとうございます。 参考にしてみます。
842 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:33:38 ] どういたしまして
843 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:59:13 ] 質問したいのですが誰かいますか?
844 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:00:12 ] います
845 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:11:32 ] じゃあ質問させていただきます。 今、作っているプログラムはあるファイルから特定の部分の値を読み込み 値だけのバイナリファイルを書き出すプログラムを作っているのですが。 sstreamを使い、値を変数に格納したいのですがfloat型だと格納できるのですが、 int型だと格納されません。 どうしてか教えてください。 ソース: stringstream ss(f_buf); int test[16 * 3]; //ここがint型だと値が入らない for(int i = 0; i < (16 * 3); i++){ ss >> test[(i * 3)] >> w >> test[(i * 3) + 1] >> w >> test[(i * 3) + 2] >> w >> w; } データ: 0;1;2;, 1;2;3;, :
846 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:13:48 ] >>845 追記 stringstream ss(f_buf);の下に char w; //記号を飛ばすための変数
847 名前:デフォルトの名無しさん [2009/06/10(水) 01:19:14 ] どうしてでしょう?
848 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:20:34 ] わからん
849 名前:デフォルトの名無しさん [2009/06/10(水) 01:27:14 ] どなたか>>845 の理由が分かる人いますか?
850 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:17 ] たとえば古いgccはstringsteamの中身に挙動不審なバグがあるので、それが原因かもしれない。 今やってみたらとりあえずgcc 4.1とVC2008はどっちもちゃんと動いた。 #include <iostream> #include <sstream> using namespace std; int main(void) { int t[3]; char w; stringstream ss("1,2,3,,"); ss >> t[0] >> w >> t[1] >> w >> t[2] >> w >> w; cout << t[0] << " " << t[1] << " " << t[2] << endl; return 0; } 出力 1 2 3
851 名前:デフォルトの名無しさん [2009/06/10(水) 01:34:22 ] >>850 さん、ありがとうございます。 環境をかくの忘れてましたね… 環境はVC2005です。 >>850 さんのソースも試してみましたがやはりだめなようです… 変数を作った時の不定な値が入ったままでした。 2008でビルドしてみようかな…
852 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:06:43 ] あるディレクトリ下にあるファイルを読み取ってから削除するという処理をしているのですが、希にコピー途中のものを読み取ってしまい、 思ったような動作が出来ない場合があります。アクセスしようと(もしくはアクセス中の)ファイルが、コピー中であるか否かの判断は 一般的にどのような方法で実装するのでしょうか。
853 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:07:49 ] >>852 OSは?
854 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:09:47 ] >>853 Windows 2000/XP です。コピー元は同じPC上の時もあれば、ネットワークを介して他PCからの場合もあります。
855 名前:853 mailto:sage [2009/06/10(水) 10:19:57 ] 俺はUNIX屋なので、後は誰かに任せた。
856 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:04:35 ] >>854 writeオープンしてからコピーする
857 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:55:21 ] FILE_FLAG_DELETE_ON_CLOSEフラグ付けて開くとか
858 名前:デフォルトの名無しさん [2009/06/10(水) 12:41:47 ] std::stringでTCHAR扱えないので std::basic_string<TCHAR>を使うってのはグーグル先生でわかったんですが、 入出力の方法が今度はわかりません。グーグル先生に聞いてもわかりませんでした。 std::cinやstd::coutの代わりにどのように使うんでしょうか?
859 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:19:21 ] //hoge.h class CHoge { public: void hoge(); }; //hoge.cpp #include "hoge.h" void CHoge::hoge() {・・・}; このCHoge::hogeを省略してhogeだけで書きたいんですけどそういうことはできますか? なぜかusing CHoge::hogeではできませんでした
860 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:22:27 ] 名前空間じゃなくてクラス名か。 全然「なぜか」じゃねーw どうしても面倒なら、ヘッダファイルに中身も書いたら?
861 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:30:00 ] C#を使えばおk
862 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:34:07 ] >>858 wstring & wcoutを使う。 >>859 #define hoge CHoge::hoge
863 名前:デフォルトの名無しさん [2009/06/10(水) 14:51:54 ] +とか+=とか、そういった四則演算関連の演算子オーバーロードを作成したいのですが、 ネットで見ると、戻り値が参照だったり実体だったりして、演算子によって違うみたいです。 どういう考え方で参照と実体の使い分けをしているのでしょうか?
864 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:58:39 ] 関数を抜けても壊れない参照を返せるなら基本参照返し。 一時オブジェクトを返さざるをえないなら泣く泣く実体返し。
865 名前:デフォルトの名無しさん [2009/06/10(水) 15:49:30 ] float型の変数がゼロかどうか(誤差も含めて)判断するときに、 1e-4fみたいな数字で比較を行っているコードを見たんですが、 こういう数字の記述の仕方(意味)を説明してるウェブページをどこか知りませんか?
866 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:53:30 ] 科学表記とかでぐぐる
867 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:32:36 ] 初歩的な部分ですが、 while(i--) 処理 は「iの値が評価され、処理を実行するか決定する」→「iがデクリメントされる」 while(--i) 処理 は「iがデクリメントされる」→「iの値が評価される」 ということで、i>0なら前者は処理が i 回、後者は (i - 1)回行われるということでよいのでしょうか。
868 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:34:44 ] コーディングの最終段階に入っていて、 なるべく見通しが良くなるように関数に処理を分割したりしています。 a,b,cという関数が有って各関数はうまく行けば0を返し失敗すれば1を返します。 aがうまく行けばbを,bがうまくいけばcを行いcがうまく行けば 最後に少量の出力が有ります。 そこで、今の段階はプロトタイプとして int main() { if(a == 0) { if(b == 0 { if(c == 0{ //some print } } } return 0; } となっているのですが、ネストが深くなりすぎているような気がしてなりません。 なにか良い方法が御座いましたらご教授願います。
869 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:37:21 ] if (!a && !b && !c)
870 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:41:00 ] !(a||b||c)
871 名前:868 mailto:sage [2009/06/10(水) 17:43:50 ] 見落としていた点が有りました。 追加で書きますがお許しください。 aが失敗すればプログラム終了 bが失敗すればプログラム終了 cが失敗すればプログラム終了 とそれぞれ行いたく思います。 よろしくおねがいします。
872 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:50:39 ] それは a が false を返す代わりに exit(1) を呼び出せばいいじゃないか^-^
873 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:57:00 ] >>872 そうなんですよね、一度そのような事を考えたのですが 言語はC++なのですが、 kmaebashi.com/bbs/bbs12.html というページを見かけてなんとなく怖くなってexit()を使わなくしたのですが、 実際どうなのでしょうか? よろしくおねがいします
874 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:09:17 ] どっちにしても>>869 や>>870 でOK。
875 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:11:32 ] >> 874 ありがとう御座います。 無事きれいになりました!! 感謝感激です。
876 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:52:22 ] C++にはJavaのObjectクラスに相当するようなものは無いんでしょうか? Java使い向けに書かれているデザインパターン本を読んでて 脳内翻訳するのに必要になったもので
877 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:59:05 ] 全然別人が話に食いつきます。 >>873 が言う >ISO/IEC 14882:1998 3.6.1-4 >exit 関数を呼び出すことは現ブロックを抜けずにプログラムを終了させることであるため、 >自動記憶域期間を持つオブジェクトは破棄されない。 >静的記憶域機関を持つオブジェクトのデストラクタ中から > exit を呼び出すことは、未定義の動作を引き起こす。 これって 巻頭言 2000〜 ttp://park1.wakwak.com/~y-nagano/200001.html ここに書いてあるとおりなんだろうが、 恐ろしいよねぇ。
878 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 19:37:24 ] もよもと exit はプログラムの異常終了時くらいしか使わんからなー。
879 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:17:11 ] >>858 自分で作ればいい。 #ifdef UNICODE # define tcin std::wcin # define tcout std::wcout # define tcerr std::wcerr # define tclog std::wclog #else # define tcin std::cin # define tcout std::cout # define tcerr std::cerr # define tclog std::clog #endif あと、mainの頭で、文字コード変換が行われるように指示しておく。 std::locale l(""); // 数値を取り扱うならstd::locale l(std::locale::classic, "", std::locale::ctype);のほうがよいかも。 tcin.imbue(l); tcout.imbue(l); tcerr.imbue(l); tclog.imbue(l);
880 名前:デフォルトの名無しさん [2009/06/10(水) 20:57:45 ] C++なら例外使えばいいのに
881 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:00:13 ] >>880 誰もキャッチできない例外をスローするってこと? みんなはそうしてるの?
882 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:03:14 ] 例外のよい使い方がいまだにわからん
883 名前:881 mailto:sage [2009/06/10(水) 21:14:30 ] >>882 俺は 関数の戻り値は正常値ならおk、 異常値を返す場合は-1とか0とかそういう値に限り、 不完全なオブジェクトを返すような形は とらないようにしている。 そして不完全なオブジェクトを返さざると得ない時に 例外を使っている。 ・・・でもやっぱり俺もわからない。
884 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:15:49 ] ttp://pc12.2ch.net/test/read.cgi/tech/1241438694/ ここの>>740 が妙な提案をしていたよ。 もっとも実際には出来なさそうって結論になったのだが。
885 名前:デフォルトの名無しさん [2009/06/10(水) 22:06:18 ] ABCが失敗したら例外発生させて、キャッチして適当に処理して return 0 すればいい。
886 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:24:46 ] VC++を勉強するのにお勧めの本ありますでしょうか? 初級〜中級くらいをめどに
887 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:29:14 ] いわゆるぺゾルト本。 Programing Windows 第5版。 定番なので。
888 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:32:10 ] >>886 VC++だから、MFCかも知れないが 普通にSDK使う程度なら、wisdomとか入門サイトから見るといいよ 俺はいろいろなサイト見て学んだ
889 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:33:06 ] >>887 www.amazon.co.jp/Programming-Windows-Microsoft-Charles-Petzold/dp/157231995X/ref=sr_1_1?ie=UTF8&qid=1244644307&sr=8-1 これのことでしょうか?すごくとっつきにくそうなんですが
890 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:37:56 ] 今時MFCはどうかと思うけど、お勧めの本はなさす。 中級以上なら、Effective C++のシリーズお勧め
891 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:38:07 ] この本は原著じゃなくても翻訳はまともだから大丈夫だよw プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series) (単行本) まぁ…とっつきにくい感じはするかなぁ。 まぁ、あくまで定番ってことで。
892 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:40:51 ] Effective C++はもちろん名著だけど、VCの勉強にはならんじゃろw
893 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:16:36 ] 質問です Cでファイルに書き込むときに fwrite(str, 1, strlen(str), fp); fwrite(str, strlen(str), 1, fp); とどちらが一般的ですか?何か違いは出てくるのでしょうか?
894 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:24:08 ] VC++で、いっぱい書店においてるような本はどうなのですか? 入門〜やや中級手前レベル?の内容くらいかいてるようにはみえたのですが 役に立たないのかな
895 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:56:43 ] >>894 プログラミング言語を全く知らない人が、いきなりVCに手を出す状況とかなら 決して悪くはないんじゃないかしら?
896 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:49:07 ] >>893 fwrite(str, 1, strlen(str), fp); に1票。 なんとなく2番めの引数は型のサイズ、3番めの引数はその個数って 思っている。
897 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 04:45:58 ] >>893 >fwrite(str, 1, strlen(str), fp); 1バイトをstrlen(str)分書き込む、成功した際の戻り値がstrlen(str) >fwrite(str, strlen(str), 1, fp); strlen(str)バイトを1回書き込む、成功した際の戻り値が1 結果は同じ ただ、意味のあるデータなら後者の方が意味的に良くない?
898 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:13:39 ] >>895 >プログラミング言語を全く知らない人が、いきなりVCに手を出す状況 そうとうな窮地だな。
899 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:24:29 ] #include <iostream> #include <list> int main() { std::list<int> nums1; nums1.push_back(4); nums1.push_back(6); std::cout << nums1[0] << std::endl; std::cout << nums1[1] << std::endl; return 0; } vectorで動いたソースをlistに変更してみたら動かないのでしがなんででしょうか?
900 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:52:45 ] エラーメッセージ読めよ
901 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:56:21 ] 「動かない」というのはこの場合、極めて曖昧な比喩表現でしかない。 比喩を使われても困る。
902 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 11:17:11 ] list<int>::iterator p = nums1.begin(); while( p != nums1.end() ) { cout << *p << endl; p++; } list はランダムアクセス子をもってない
903 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 12:24:09 ] www.geocities.jp/KY_webid/cpp/library/012.html なるほど了解した。ありがと
904 名前:デフォルトの名無しさん [2009/06/11(木) 15:57:58 ] gprofって、対象のプログラムが使うライブラリが全てスタティックリンク でないといけないのです? そういうのないですよね?
905 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:09:13 ] try { m_pInt = new int [N]; } catch { delete [] m_pInt; // <-するべき?それとも放置? }
906 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:28:03 ] >>905 m_pIntに予め 0 を入れておけばdeleteしても問題ない
907 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:38 ] >>905 そんなことよりboost::scoped_array使え。
908 名前:デフォルトの名無しさん [2009/06/12(金) 01:31:58 ] ちょっとした質問です。 二分木の高さと深さは違うものですよね。
909 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:37:26 ] 木の「高さ」とノードの「深さ」のこと?
910 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:46:07 ] 下から見れば高さ、上から見れば深さ、相対的な違いか?
911 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:57:06 ] 視点が違うだけで数としては同じになる
912 名前:デフォルトの名無しさん [2009/06/12(金) 02:04:36 ] たとえば、a(左部分, 右部分)とあらわす。 aはroot a(b, NULL) b(c, d) c(NULL, NULL) d(NULL, NULL) c,dはleaf という風になっているとします。伝わるかわからないですが・・・ このとき、a,b,c,dそれぞれの高さは2,1,0,0で合ってますか?
913 名前:853 mailto:sage [2009/06/12(金) 02:07:21 ] Fedora11落としてきたばかりなのに。 最近は自前でカーネルコンパイルするの減ったな。
914 名前:デフォルトの名無しさん [2009/06/12(金) 02:50:17 ] すいません。だれか僕が作ったプログラミングのデバッグしてくれませんか?お願いします。 初歩中の初歩です。
915 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 02:56:30 ] お断りします
916 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:04:38 ] とりあえずうp汁
917 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:12:14 ] 住所・氏名・連絡先も忘れずに。
918 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:55:46 ] codepad ttp://codepad.org/ ってところに貼れ。 貼ってどうすれば良いかは分かると思う。
919 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:53:27 ] コンストラクタの引き数の規約を与えるための仮想基底クラスを作ることはできますか?
920 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:00:43 ] codepad.org/WjzXeUiM エラーがでるのですが エラーを日本語にしてもらえないでしょうか?
921 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:02:45 ] >>920 翻訳サイトつかってみたら?
922 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:06:51 ] codepad.org/qHGkIKzL う〜ん
923 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:09:35 ] >>920 どこにエラーが? 警告なら出ているようだけど。
924 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:11:42 ] 三行目を void print( const char *c ) にすればいいよ。
925 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:13:25 ] >>920 ほい、エラーを翻訳してやったよ。 -- 誤りとして扱われる警告 --
926 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:13:06 ] R255 G0 B0の赤色の1ピクセルのbitmapのデータ読み込みで 54byte飛ばして色データを読み込んで10進数で表示させたのですが 0 0 -1 0 と表示されます。 0 0 255 0と表示されないのはなぜでしょうか?
927 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:22:52 ] >>926 charに読み込んでるとか。
928 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:32:45 ] >>927 charではダメなんですか? 1バイトだからいいかと思ったのですが char unchi[10000]; fread( unchi, 1, 5000, fp ); とやっています
929 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:36:07 ] あ、わかりました charって-127~128ですよね unsignedにすればいいですか?
930 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:37:24 ] できました。 お騒がせしてすいません ありがとうございました。
931 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:40:38 ] >>929 ビットマップに限った話ではないが typedef unsigned char uint8; とでもしておくと楽。 必要に応じてuint16,uint32,uint64もtypedefしといてもいいかと。
932 名前:デフォルトの名無しさん [2009/06/12(金) 15:51:13 ] char 配列に日本語が入っているとします。 改行コードが\nで統一されている場合に wchar_tにポインタでキャストしたときに文字化けしない方法はありますか?
933 名前:932 [2009/06/12(金) 16:05:38 ] キャストしたら\r\nでも文字が正しくなく・・・ windowsのwchar_tの文字コードは UTF16とか効いた気がします・・・
934 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:08:25 ] mbtowc(wchar_t *wc_str, const char *mb_str, size_t mb_scan_size);
935 名前:932 [2009/06/12(金) 16:10:43 ] ここに書いてありました。 EUCやSJISをwchar_t* にキャストして操作しても問題は出ませんか? 表示できないだけで。 ワイド文字 - Wikipedia wchar_tの内部表現もUnicodeである必要はない。 本来はCode Set Independet(符号化集合に独立)なのである。 しかし、Windowsでは16ビット (UTF-16)、 LinuxやMac OS Xでは32ビット (UTF-32)である。
936 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:16 ] >>935 文字列の終わりの0のサイズが違うんで、キャストしただけじゃ使えないと思う。
937 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:31:42 ] 質問です int *Array; int *pNum; int Num = 10; Array = new int[1]; Array[0] = Num; *pNum = Array[0]; デバッグすると、このコードの最後の部分でエラーが起きます どうすればうまくいきますか?
938 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:34:19 ] >>937 pNumもメモリ確保しないと。
939 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:38:29 ] >>938 ああ、なるほど ありがとうございました
940 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:04:46 ] ユニコードとかって3バイト以上の文字もありますよね? wchar_tは2バイトなのにどうやってこれを格納してるんですか?
941 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:25:10 ] >>940 >wchar_tは2バイト そんなこと決まってないっしょ? 言語使用上定められているのは sizeof(char)<=sizeof(wchar_t) だけじゃない?
942 名前:デフォルトの名無しさん [2009/06/12(金) 19:39:08 ] つ UTF16
943 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:44:25 ] 少なくともうちでは2バイトじゃないから大丈夫だなあ
944 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 20:55:20 ] cygwinはwchar_tが2バイトっていうイカれた仕様 なのでUTF-8が上手く使えない…
945 名前:デフォルトの名無しさん [2009/06/12(金) 21:04:42 ] windowsも2バイト
946 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:13:12 ] そうなのか、失敬した
947 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:55:53 ] UTF-8はマルチバイトだからchar*で扱うもの
948 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:09:33 ] 16bit整数二つ→32bit整数ひとつと変換して、配列の添え字に使いたいのですが 全部のインデックスからアクセス可能にしようとすると配列がでかくなりすぎてこまります なにかいい方法はないでしょうか?
949 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:12:12 ] inline static void foo(); と static inline void foo(); とではどちらが正しいですか? foo()はあるクラスの静的メンバ関数です。
950 名前:949 mailto:sage [2009/06/12(金) 22:16:02 ] あれ? MyClassの宣言中では MyClass { //etc static void foo(); //etc }; と書き、 そのヘッダの中(ただし宣言の外で)実装を書いて inline void foo() { //実装 }; と書くのがただしいですか?
951 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:19:34 ] どっちでもいい。 どっちかが正しかったら、憶えなくちゃいけないから大変だ。
952 名前:949 mailto:sage [2009/06/12(金) 22:22:17 ] >>951 ありがとうございます。
953 名前:デフォルトの名無しさん [2009/06/12(金) 22:23:49 ] >>948 つ map mapなら、int x=-1; でも、a[x]がエラーにならない。 google製のmapもある
954 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:52:12 ] >>940 Windows環境ではsizeof(wchar_t) == 2で、UTF-16を格納している。 昔はサロゲートペアはサポートしていないと聞いたような気がするが今はどうだか知らん。 多くの*NIX系環境ではsizeof(wchar_t) == 4で、UTF-32(UCS-4)を格納している。
955 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:08:32 ] int型の配列に整数だけを代入したいときにはどうすればよいのでしょうか? isdigitが数字かどうかの判定が出来るというので、使ってみたら、エラーが出ます。 これがソースの一部です。 for(i = 0; i < 10; i++){ while(isdigit(a[i]) == 0){ printf("%d個目の整数です。\n",i+1); fgets(buf, 10, stdin); sscanf_s(buf, "%d", a[i]); } } whileの中身をどうにかすればうまくいくと思うんですが。
956 名前:デフォルトの名無しさん [2009/06/13(土) 02:14:55 ] いろいろとだめだろ。 &がついてないし、入力後に確認すればいいものをループの上で判定するし たとえば変数xに数字が入っていたら代入すればいいし。
957 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:15:07 ] ソースの一部を貼るのはいいが、特に初心者ならちゃんと変数宣言とかも書いてくれ。 あとエラーメッセージもちゃんと書いてくれよ。 エスパー技能を発揮できる人間はそうそういないんだから。
958 名前:デフォルトの名無しさん [2009/06/13(土) 02:23:10 ] たとえば。 int inputsu(){ int x; do{ scanf("%d", &x); } while(x<0 || x>1000); return x; } int main(){ int i; int a[10]; for(i = 0; i < 10; i++){ printf("%d個目の整数です。\n", i+1); a[i]=inputsu(); } }
959 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:23:43 ] >>955 isdigitは、あるcharの1字が'0'から'9'までの数字に分類される文字かどうかを判定するだけ。 数値であるかどうかの判定とは違う。 a[i]に値が入るのはsscanf_sの時点。 そのsscanf_sは代入できたデータの数を戻り値にする。見るべきはこれ。 for (i = 0; i < 10; i++) { do { printf("%d個目の整数です。\n", i + 1); fgets(buf, 10, stdin); } while (sscanf_s(buf, "%d", &a[i]) != 1); }
960 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:36:13 ] >>956 入力後に確認ですか、ありがとうございます。 >>957 すいません、次から気をつけます。 visual C++ 2008EEでやっているのですが、ビルド時にエラーは出ないんです。 コンパイルしたときに Debug Assertion Failed! Program:...\Visual Studio 2008\Projects\~ Line: 56 Expression: (unsigned)(c + 1) <= 256 For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. っていうメッセージが出ます。
961 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 02:48:22 ] >>958 >>959 言われたとおりにやってみたら、 期待したとおりの出力結果が得られました。 ありがとうございます。
962 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:23:58 ] Webを参考に全ての順列を列挙するプログラムを作ったんですが、 これをnPkが列挙できるように改良するにはどうすれば良いですか 引数を一つ増やして(int k) 終了条件をt.size()==kとしてみましたが 予想よりも多く結果が出力されてしまってうまくいきません void perm(int p,vector<int>& v,vector<int> t){ if(t.size()==v.size()){ copy(t.begin(),t.end(),ostream_iterator<int>(cout," "));cout<<endl; } for(int j=p;j<v.size();++j){ t.push_back(v[j]); perm(p+1,v,t); t.pop_back(); perm(p+1,v,t); } } int main(){ vector<int> v(5),t; for(int i=0;i<5;++i){v[i]=i;} perm(0,v,t); }
963 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:37:58 ] C言語でマイコンからLCDに文字列を出力するプログラムで void PutString(char* point); void PutChar(char data); main(){ PutString("Hello,world!"); } void PutString(char* point){ while(*point){ PutChar(*point); ++point; } } void PutChar(char data){ //LCDに1文字出力し、カーソルをインクリメントする } 上記のプログラムが正常に動くのですが PutString("Hello,world!"); 文字列のリテラルとchar型ポインタは型があわないはずなのに なぜこの行がエラーにならず正常に動のでしょうか? マイコンというよりCの言語仕様の話だと考えたのでこっちに質問しました。
964 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:42:06 ] 俺も最近マイコンのプログラムに触れて思ったけど、 マイコン向けのコンパイラってANSIとかに厳密に追従してない感じだな ところどころ気持ち悪い
965 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 13:47:46 ] 標準出力? 何ソレ? みたいな環境もあるからな。 それはしゃーない。
966 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:05:57 ] >>963 "Hello,world"はchar[12]型。 それが配列からポインタへの変換でchar*になる。 型の問題はどこにもないぞ。
967 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:15:59 ] ヒント:リテラル
968 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:23:34 ] え?文字列リテラルは書き換えできなくてもchar*に変換できるだろ。
969 名前:963 mailto:sage [2009/06/13(土) 15:52:05 ] >>964-968 アドバイスサンクスです。 関数コール時に一時的にメインメモリ上にchar[12]の領域が確保され そのポインタが渡され、型の問題が生じない。という理解で良いですか。 char[12]が一時的に確保されたなら、その領域が解放されるのは PutString("Hello,world!"); を抜けた時でしょうか。
970 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:12:22 ] いいや、一時的な領域が作られることはないよ。 基本的に、文字列リテラルは予め用意された静的な領域に置かれるが、 そこへのポインタそのものがPutStringの引数として渡される。
971 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:01 ] 型安全についてCよりも厳しくなったC++では この変換を「死の変換」と呼ぶ。
972 名前:963 mailto:sage [2009/06/13(土) 16:26:04 ] >予め用意された静的な領域に置かれる 納得しました。 >>971 「死の変換」ですか・・・ 関数から抜けた後は、その文字列リテラルへのポインタがわからなくなり 永遠にアクセスできない領域になってしまうためそう呼ばれるのでしょうか。 char hello[12] = "hello,world!" と最初のほうに書いておき、 PutString(hello); とやるほうが望ましいでしょうか。
973 名前:デフォルトの名無しさん [2009/06/13(土) 16:28:43 ] C++でnamespaceの名前つけかたのルールみたいなものってあるんですか? Javaだと全部小文字でドメイン名をひっくり返したものとか、あるけど。 大文字で始まってるのよく見る気もするし。 ドットが入ってるのあんまり見ないし ドメイン名っていうのはかぶらないのでいい方法だと思うけど yahoo.co.jpだったらどんなのつけます?
974 名前:デフォルトの名無しさん [2009/06/13(土) 16:31:59 ] そういうのは、プロジェクトポリシーで決まるんじゃねーの
975 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:36:10 ] >>972 いや、それよりもPutStringの引数にconstつけろよ。
976 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:40:57 ] >>973 全世界にソース公開とかじゃない限り「絶対にかぶらない名前をつける」ってのは 重視しなくていいんじゃないかな。 ちなみに、自分はクラス名と同じ命名規則。
977 名前:デフォルトの名無しさん [2009/06/13(土) 16:44:55 ] プログラムのわかりやすさではstringだな。 生成と動作のコストがかかるが。
978 名前:デフォルトの名無しさん [2009/06/13(土) 16:52:01 ] 長い文字列、データをソース内に貼り付けるとコンパイル時間かかりサイズもでかくなる。 計算や短い文から生成できるならそれ使うべき。
979 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:29:48 ] 日本語の識別子を使う人なんてめったにいないだろうから namespaceで日本語を使えば被る確立はほとんどないだろう コンパイラ依存だけど
980 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 17:57:37 ] >>979 どう考えたって、 仕様違反のコンパイラ依存に確実になるくらいなら namespaceがかぶる危険があるってだけの方が まだマシだと考えるヤツが大半だと思うが。 ローマ字に止めるべし。
981 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:01:00 ] 和製英語のローマ字読み最強
982 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:19:57 ] BOOL bBlockConnect(char * pAddr, int iPort, unsigned int uiMsg); int iOnSocketEvent(WPARAM wParam, LPARAM lParam); BOOL bInitBufferSize(DWORD dwBufferSize); XSocket(HWND hWnd, int iBlockLimit); virtual ~XSocket(); int m_WSAErr; BOOL m_bIsAvailable; BOOL m_bIsWriteEnabled; void _CloseConn(); int _iSendUnsentData(); int _iRegisterUnsentData(char * cData, int iSize); int _iSend(char * cData, int iSize, BOOL bSaveFlag); int _iSend_ForInternalUse(char * cData, int iSize); メンバ関数の 始まりの文字が b -> return BOOL i -> return int と規則的に作られてるのですが _ (アンダーバー)で始まるのは何の意味があるのでしょうか?
983 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:24:17 ] 実装した奴が、そうしたかったから 言語仕様での意味はないはず。
984 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 18:39:53 ] privateなメンバとか。何か規則があると思う。 スコープがクラスだから、_[a-Z]+()なメンバ関数があっても他のスコープと識別子がかぶることはないが、 _[a-Z]+で始まる識別子は予約されているので、マクロで置き換えられたときに嵌まるおそれがある。
985 名前:デフォルトの名無しさん [2009/06/13(土) 19:00:49 ] STLのmapの容量はかってみた。 <int,int>で2の21乗個登録したら、127M使用していた。 一個あたり、64バイト。 通常の配列だと4バイト、16倍も消費量が多い。 もっと少なくなるやつある?