- 1 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:10:30 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 610 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 08:58:59 ]
- ほとんど俺の自演だけどな
- 611 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 13:30:25 ]
- >>605
そこまでいくとBetter Cではなく、もうC++。
- 612 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 13:40:37 ]
- >>609
馬鹿が「なんか自分が賢くなったような気分」で気軽に参加できる 絶妙なレベルだったんだろう。
- 613 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:44:25 ]
- ReadFile() vs fopen()
- 614 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:07:20 ]
- CreateFile()の間違いじゃないのか
- 615 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:43:12 ]
- なんにせよ適材適所、時と場合によって使い分けるだけ。
fopen テキストモードを使いたい。ANSI C上の移植性が欲しい。 CreateFile 非同期読み書きやメモリマップドファイルを使いたい。
- 616 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:06:50 ]
- このコードがVS2005 SP1でSEGVになるんだけど、俺んとこだけですかね
#include <iostream> #include <sstream> #include <locale> int main() { std::wstringstream ss; std::locale myloc("japanese"); ss.imbue(myloc); ss.put(L'「'); int n; if (ss >> n) // <--- SEGV std::cout << n << std::endl; }
- 617 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:09:23 ]
- nはいくつよ?
- 618 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:18:49 ]
- >>617
は?
- 619 名前:616 mailto:sage [2007/07/31(火) 16:20:12 ]
- ちなみにこれとほぼ同じコードがboost::xpressiveで正規表現を
コンパイルする際に使われているのですが、 これがSEGVになるお陰でワイド文字でboost::xpressiveが使えないという有様です。
- 620 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:33:09 ]
- ワイド文字は色んなコンパイラでサポート不完全だよな。
- 621 名前:616 mailto:sage [2007/07/31(火) 16:37:03 ]
- >>620
VC8.0はグローバルロケールを設定した際に標準出力が腐るのは知ってたんだけど…… (Cではグローバルなロケールしかないので回避方法も無い) これは酷すぎる。と思った。サポート不備ではなく、ただのバグでしょう。 無論VS2003では何の問題も起きないコードです。数値として読み込めないものが 入っているから、intに読み込めずstreamの状態がfailになるのが正しいんですが。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:37:52 ]
- >>616
xlocaleの_Maklocbyte<wchar_t>がバグっちょる。 template<> inline char __CRTDECL _Maklocbyte(wchar_t _Char, const _Locinfo::_Cvtvec& _Cvt) { // convert wchar_t to char using _Cvtvec - char _Byte = '\0'; + char _Byte[2] = {'\0'}; _Mbstinit(_Mbst1); - _Wcrtomb(&_Byte, _Char, &_Mbst1, &_Cvt); - return (_Byte); + _Wcrtomb(_Byte, _Char, &_Mbst1, &_Cvt); + return (_Byte[0]); } と直せばとりあえず、動くようにはなる。
- 623 名前:616 mailto:sage [2007/07/31(火) 16:48:25 ]
- >>622
ウホットンクスです。 とりあえずヘッダ修正してみた。 _Byte[]が2byteでいいのは「MS Windowsだからそう仮定して良い」てことですね。 しかしひでーバグだ。 修正したヘッダのコードなら正常に動くことを確認しました。感謝。 が、コンパイルオプションによっては、MSVCP80.DLLに入ってる特殊化バージョンが リンクされてしまい、やはりバグってしまいますね。 勘弁して欲しい。
- 624 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:52:29 ]
- 勘弁して欲しいのはお前の方だ
- 625 名前:616 mailto:sage [2007/07/31(火) 16:54:11 ]
- >>624
あ、もしかしてこれって有名なバグだったんですか? それは失礼。
- 626 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:23:11 ]
- VS 2005 で↓が警告最大でも普通にビルドでき、しかも、デストラクタで
実行時エラーになるのは既知の不具合ですか? #include <memory> int main() { std::auto_ptr<int> i = new int(1); } g++ だと型の不一致できっちりコンパイルエラーになります。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:26:43 ]
- 確かにコンパイルできたけど、実行時エラーにはならなかったよ。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:53:19 ]
- >>622
調べてみたらVS2003でも同じコードだった すげー萎えた
- 629 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 22:04:03 ]
- おっきした
- 630 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:02:03 ]
- >>627
むむ。new int(10) でもエラーにならないですか?
- 631 名前:627 mailto:sage [2007/07/31(火) 23:08:21 ]
- それでもエラーにならなかったよ。
Visual C++ 2005 EE (SP1) ところで、.NET 2003 (SP1)では コンストラクタがexplicitと宣言されているからと言って、C2440のエラーになる。
- 632 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:23:00 ]
- 規格では explicit になってるから、>>626 はエラーじゃないとマズいな。
ビルドできるって、VS 2005 の memory の中身はどないなっとるんじゃ。
- 633 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:28:52 ]
- ひ・み・つ♪
- 634 名前:デフォルトの名無しさん [2007/08/01(水) 00:06:07 ]
- ソース解析中分からないところがあり質問させてください。
#define A_NUM (20000) class A : public B{ private: static C < (unsigned long) A_NUM > list; C++勉強し始めて日が浅くて申し訳ないのですが、上記ソースの一番下の行は どういうことをしているのでしょうか?
- 635 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:08:00 ]
- C というクラステンプレートのテンプレート引数に A_NUM を指定して、
そのオブジェクト list を宣言
- 636 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:15:42 ]
- >>635
さんくす。 クラステンプレートがよく分かってなかったので、 その箇所を詳しく調べることにします。
- 637 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:04:47 ]
- 初心者的質問ですが、お願いします
int *x[3]; x[0]=(int *)malloc(3); x[1]=(int *)malloc(4); x[2]=(int *)malloc(5); free(x); 上記のようにポインタの配列に各個mallocして、最後にfreeをすると エラー(コンパイルは通る)がでてしまいます。
- 638 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:08:08 ]
- >>637
free(x[0]); free(x[1]); free(x[2]);
- 639 名前:637 mailto:sage [2007/08/01(水) 02:13:50 ]
- >>637のソースが抜けておりました・・・申し訳ございません・・・
x[0]=(int *)malloc(3); x[1]=(int *)malloc(4); x[2]=(int *)malloc(5); for(i=0;i<3;i++)x[0][i]=i; for(i=0;i<4;i++)x[1][i]=i*3; for(i=0;i<5;i++)x[2][i]=i*10; free(x[0]); free(x[1]); free(x[2]);
- 640 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:19:53 ]
- >>639
x[0]=(int *)malloc(3*sizeof(int)); x[1]=(int *)malloc(4*sizeof(int)); x[2]=(int *)malloc(5*sizeof(int));
- 641 名前:637 mailto:sage [2007/08/01(水) 02:26:02 ]
- >>640
おお、上手く通りました。 ありがとう&&多謝
- 642 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:11:44 ]
- 質問です
クラスを継承させて使うときに基底クラスのprivateなメンバ変数を publicではなく、privateの状態のまま継承させることはできないでしょうか?
- 643 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:26:45 ]
- 意味がよく分からん。
基底クラスの private 変数は派生クラスから見ても private じゃねーの?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:43:31 ]
- てか、派生クラスから見えないし。
- 645 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:46:32 ]
- 派生クラスで使いたいならprotectedにするだろうしねぇ……
- 646 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:52:23 ]
- >>642
>>645の言うように派生クラスから基底クラスのprivate変数に アクセスしたいって意味なら基底クラスを変更するしかないな。 他の選択肢はpublic、アクセッサの追加、friendとかかね
- 647 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:22:08 ]
- VC++ 2005 Expressを使用しています。
Windowsのデスクトップ上のアイコンをデスクトップ設定の自動整列以外で移動するにはどうしたらいいでしょうか 例えば全体的に右にあるアイコン群を左によせたり上にあるのを下に〜等 よろしくお願いします
- 648 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:54:28 ]
- こっちのスレに行くか、Windows板に行くかのどっちかだと思う
Win32API質問箱 Build55 pc11.2ch.net/test/read.cgi/tech/1184853465/
- 649 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 14:03:56 ]
- あとは、、、SysListView32 デスクトップ アイコン 移動 でググるとか
- 650 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 21:39:29 ]
- >>631
今日会社の VS2005 PE に SP1 を当てたけど、デバッグビルドで実行 すると、operator delete で落ちます。何が違うのかしら。 >>632 memory はたぶん問題なくて、最適化がからんでそうです。代入文が、 std::auto_ptr<int> i(std::auto_ptr_ref); に変形していて、デストラクタで int の値を解放しにいって落ちると。 もぎゃー
- 651 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 21:47:54 ]
- もぎゃーってなに?
- 652 名前:もぎゃー mailto:sage [2007/08/01(水) 22:44:09 ]
- なんかはやらそうと狙ってる予感。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 05:56:27 ]
- void型って、どんな型にも切れるただのメモリアドレスって考えれば良いのですか?
- 654 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 06:07:04 ]
- void型なんて変数は存在せんぞ。
void *型ならあるが。
- 655 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 06:48:25 ]
- std::auto_ptrみたいな不良品つかわずにboost::scoped_ptr使えばいいのに
- 656 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 07:45:14 ]
- kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4803.txt
正の整数を二つ読み込んで、その乗算をシフト演算によって行いたいのですが、プログラムがうまく動きません。 強制終了されてしまいます。 (例) 53×25=53×(2^4+2^3+2~0)=(53を左に4ビットシフト)+(53を左に3ビットシフト)+(53を左に0ビットシフト) どこが悪いのでしょうか・・・。
- 657 名前:656 mailto:sage [2007/08/02(木) 07:46:01 ]
- あ、2^0です。
- 658 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 07:58:22 ]
- mainのkが未使用変数の使用であるとかって警告でなかった?
エスパーすると、divideのkがmainのkに影響を及ぼすことはないよ。
- 659 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 08:00:34 ]
- おっと、未使用変数->未初期化変数、または、値の割り当てられていない変数
- 660 名前:656 mailto:sage [2007/08/02(木) 08:13:08 ]
- >>658
はい、警告とかは出てないんですよ・・・。 どこをどう直せばいいでしょうか。
- 661 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 08:29:17 ]
- ヒント:ポインタ アドレス渡し
- 662 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 08:37:18 ]
- まずはコンパイラの警告レベルを最大にすることだな。
VC++なら/W4 bccなら-w gccなら-Wall
- 663 名前:656 mailto:sage [2007/08/02(木) 08:56:45 ]
- >>662
おお!そんなことができるのですね。ありがとうございます。 警告 W8013 test.c 26: 's' は、おそらく値が代入される前に使われている(関数 divide) と出ました。どういう意味でしょうか・・・。
- 664 名前:656 mailto:sage [2007/08/02(木) 09:12:45 ]
- >>661
ありがとうございます。kのアドレスをdevideに引き渡せばいいのですね。 そこは修正したのですが、まだダメみたいです・・・・。
- 665 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:48:28 ]
- void* と char* のビット表現は等しいんだっけ?
- 666 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:52:07 ]
- int s;
*k = 0; while (no>0) { count[*k] = analyze(no, s); ←初期化されてないsが使われてる no -= (1<<count[(*k)++]); }
- 667 名前:656 mailto:sage [2007/08/02(木) 09:53:38 ]
- すいません、できました。
divide関数内で *k++とかいう変なことをしてたみたいで・・・ *k += 1; と書き換えたらできました。 ありがとうございます。
- 668 名前:656 mailto:sage [2007/08/02(木) 09:55:16 ]
- >>666
ああなるほど、ポインタは括弧をつければよかったんですね・・・orz sは初期化されてないからですか・・・わかりました、ありがとうございます。
- 669 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 10:03:19 ]
- >>665
うん。 "A pointer to void shall have the same representation and alignment requirements as a pointer to a character type." ISO C 6.2.5 Types p26
- 670 名前:656 mailto:sage [2007/08/02(木) 10:03:24 ]
- というか、sを戻り値として返すなら、divide関数でsはいらないですね・・・。
アホだ・・・orz
- 671 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 15:03:47 ]
- Wallにしたら標準ライブラリでさえゴルァされるから使い物にならんと思うんだけど
- 672 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 15:06:18 ]
- >>669
d
- 673 名前:デフォルトの名無しさん [2007/08/02(木) 15:31:38 ]
- std::vector<int> v;って宣言したときにこれのサイズを保持する型を
std::vector<int>::size_typeって宣言するのではなく 変数名vを使って宣言したいのですがなんか良い方法無いですかね? typeof(v)::size_typeとかboost::range_size< typeof(v) >::type (←勿論通りません><) みたいにできたらめちゃ便利だと思うんですが
- 674 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:03:34 ]
- typeof は提案されたこともあるみたいだけどねえ。
いまんとこはできないね。 そういう場合は typedef しとくというくらいしか言えんなあ。 std::vector<int> v_t; v_t v; v_t::size_type i;
- 675 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:06:22 ]
- typedef が抜けてた。まあいいや。
- 676 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:07:40 ]
- ><;
- 677 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:12:12 ]
- <>;
- 678 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:13:49 ]
- ×;
- 679 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:26:34 ]
- ◇;
- 680 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:34:10 ]
- チョー!
- 681 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:34:32 ]
- BASIC スレにでも迷い込んだのかと思った
- 682 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:38:20 ]
- CLS
- 683 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 16:53:10 ]
- すいません。
void *型ってどんな型にも切れるただのメモリアドレスって考えれば良いのですか?
- 684 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:08:12 ]
- お前別スレで質問してきちんとした回答貰ってるだろうが
礼儀知らずにも程がある
- 685 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:10:30 ]
- ええ〜、してないですYo!
- 686 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:13:33 ]
- 死ね
- 687 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:19:25 ]
- 一方的に決めつけられて、死ねといわれる始末。
なんという仕打ち。
- 688 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:19:49 ]
- 「切れる」っていうのが、なんかアクロバティックな用法だなあ。
こう、「アタシは侍ザマス!」みたいな? 「void*型からunsigned long(*)(bstr_t const&, IDispatch**)型に斬ってしんぜるナリ!」みたいな?
- 689 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:22:55 ]
- >>683
言葉の使い方は他人に通じるように
- 690 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:23:44 ]
- >>673-674
今はdecltypeという名称になっている。
- 691 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:26:33 ]
- >>687
同じ文体なんだから別人なら普通変えるだろ。バカかよ
- 692 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:27:25 ]
- 不毛
- 693 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:31:11 ]
- ><;
- 694 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:35:58 ]
- >>684
そのスレどこ?
- 695 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 17:58:27 ]
- >>692
C++スレだけに
- 696 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 18:08:50 ]
- >>694
pc11.2ch.net/test/read.cgi/tech/1184717430/653-654 >>695 誰がうまいこと言えと(ry
- 697 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 18:25:13 ]
- >>684
別スレじゃなくてこのスレかよ >>685 お前の言葉は本当だったな
- 698 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 19:16:35 ]
- 構造体のサイズをsizeofで取るとなんか不思議な結果が返ってくる。
struct TEST { char chr[3]; }; printf("%d\n", sizeof(TEST)); 結果:3 struct TEST2 { long lng; char chr[3]; }; printf("%d\n", sizeof(TEST2)); 結果:8 TESTとTEST2で明らかに計算方法が違うのはなぜなんでしょうか?
- 699 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 19:23:41 ]
- 「パティング 構造体」でググると幸せになれるよ
- 700 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 19:26:02 ]
- パディングじゃね?
- 701 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 19:28:07 ]
- そして、なぜパディングが入るかというと、境界調整のため。
- 702 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 19:42:41 ]
- >>699-701
www.g-ishihara.com/c_st_01.htm を見て納得しました! ありがとうございます。
- 703 名前:デフォルトの名無しさん [2007/08/02(木) 19:50:02 ]
- すいません、おじゃまします。
コンストラクター、デストラクターからstaticのメンバー変数にアクセするにはどのように記述したらよいでしょうか。
- 704 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 20:01:11 ]
- >>703
普通に。
- 705 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 20:49:03 ]
- >>704
解答としては不適切。
- 706 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 20:57:27 ]
- >>703
不適切。
- 707 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:00:09 ]
- >>705
それ以外に答えようが
- 708 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:00:16 ]
- 静的メンバからのアクセスは制限あるけど
逆は問題ないよね?
- 709 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:17:00 ]
- うん
- 710 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:23:30 ]
- fstreamが遅いんですが何とかなりませんか。
wfstreamともなるとアホみたいに遅いです。
|

|