[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/27 10:25 / Filesize : 239 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.40【環境依存OK】



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ともなるとアホみたいに遅いです。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<239KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef