1 名前:デフォルトの名無しさん [2007/11/03(土) 00:20:13 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.43【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1190860744/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
12 名前:デフォルトの名無しさん [2007/11/03(土) 05:42:16 ] テキストファイルはせいぜい300Mくらいだろうから、最初にメモリを確保してしまおうとおもうけど 万が一数ギガのファイルを渡されたら処理しきれなくなるからエラーを返さないとと思った
13 名前:デフォルトの名無しさん [2007/11/03(土) 05:46:37 ] あと、どうやらメモリ領域を拡大する命令ってcにもc++無いようだね 新規に確保してコピーするみたいだね realloc()は内部でそのようなことをやっているらしい となるとvectorでもstringでも初めに必要な領域をうまく設定することが速度にかなり影響するだろう
14 名前:デフォルトの名無しさん [2007/11/03(土) 06:04:46 ] vectorとstringが自動で確保する領域を調べたけど stringは最低限の確保しかしないけどvectorは一気に倍に増やすね だからvectorはそれほど慎重に領域設定しなくていいとはおもうけど それでも例えば500M 使うとすると途中で合計500M前後領域を作成してコピーすることになるから 確保しておけば速くなるね
15 名前:デフォルトの名無しさん [2007/11/03(土) 06:41:41 ] 久々にVisual Studio 2005 でC++プログラム作成しようとしたのですが ビルドを実行したら、出力タブに途中結果、エラーメッセージが一切 表示されず最終結果しか表示されません。 例) ------ ビルド開始: プロジェクト: MatrixMultiply, 構成: Debug Win32 ------ ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== わざとスペルミスしても、正常終了しておりエラー一覧タブにも 一切表示されません。 修正したら、ビルドに成功してプログラムを実行できます。 ビルドの途中結果とエラーメッセージを表示する方法を教えて欲しいです。
16 名前:デフォルトの名無しさん [2007/11/03(土) 09:32:29 ] char* buffer にCreateFileなどでファイルの文字列を一気に読んで それをstrtok_sで分割し、とっておきたいとします。 char* hoge = strtok_s(NULL,delim,&nexttoken); char* hage = strtok_s(NULL,delim,&nexttoken); int sage = atoi(strtok_s(NULL,delim,&nexttoken)); そして、読み込み&分割が終わった後に delete[] buffer と、後始末をすると、hoge hageの内容も一緒に消えてしまいます。 コピーをとっておく場合はどうやって書いたらいいんでしょうか? 文字列関係がまだ良く分かりませんので、できれば具体的に教えてください。 ちなみに、 char hoge[256]; strcpy(hoge,strtok_s(NULL,delim,&nexttoken)); とか char hoge[256]; sprintf(hoge,strtok_s(NULL,delim,&nexttoken)); などとやttみたんですが、内容がフフフフの連続のようになってしまいました。 正しくはどうやって書いたらいいですか?
17 名前:nkkn5 [2007/11/03(土) 13:56:21 ] isprint についてどなたか教えてください。 (初心者です) int l; l = isprint(-1); cout << l << endl; はOKなのですが、 l = isprint(-2); cout << l << endl; とすると実行時に assertion failed の エラーとなります。 これはなぜなのか教えてください。 (環境はWinXP、VisualC++2005ExpressEditionです) <質問の過程> あるC++の本にcharの文字と文字コードを 表示するプログラムが載っていて、 その中で表示できない文字は(isprintで判定) " "を出力するというようになっておりました。 ところがその本ではcharは0から255という環境を 前提にfor文で0からCHAR_MAXまでループするよう 書かれており、自分の環境では-128(CHAR_MIN)から 127なのでこの部分を修正して実行してみたわけです。 すると実行時にエラーで落ちてしまい、 追及していったところ、isprintが原因らしいことが わかったところです。 負の数を-1以外入れてはいけないのでしょうか?
18 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:02:49 ] isprint には unsigned char で表現可能な値または EOF しか指定できない。 それ以外の値を指定したときの動作は未定義。
19 名前:nkkn5 [2007/11/03(土) 14:24:52 ] >>18 ありがとうございます。 やはりそうなんですか。 そうしますと、私が見た本のように charの定義域全体をisprintを使いながら (表示できないものは表示しないようにしながら) 表示していくということはできないということですね。 あと、お答えにあったようなことは 今後どういった資料をみたらよいのか 教えていただけませんでしょうか。 HELP見たのですが、まだ理解できない 私のC++にの対しての理解状態ですので、 わかりやすいものがあればと思ったのですが。
20 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:43:03 ] Media Playerみたいにウインドウの概観を変えるプログラムって、どういう教科書を読めば良いでしょうか? 開発環境はVisualC++ 2005を想定しています。どなたか、よい教科書をご存知の方がいらっしゃいましたら、教えてください。
21 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:44:01 ] Owner Draw
22 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:49:47 ] >>20 SetWindowRgnでぐぐるといいかも
23 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:13:04 ] >>19 できる char に対する CHAR_MAX のように、unsigned char に対しては UCHAR_MAX があるので、 0 〜 UCHAR_MAX まで回せばいい 資料は VC 使ってるなら MSDN でいいんじゃない インストールしてるかどうか知らないが、オンラインでも読める msdn2.microsoft.com/ja-jp/library/4yc6feha (VS.80).aspx >is 系ルーチンは、-1 (EOF) 〜 UCHAR_MAX (0xFF) の整数の引数に対して、意味のある結果を生成します。 msdn2.microsoft.com/ja-jp/library/ewx8s4kw (VS.80).aspx >isprint は EOF でないパラメータまたは 0 〜 0xFF の範囲にないパラメータを渡された場合に CRT アサートを表示します わかりやすいかどうかはなんとも
24 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:54:43 ] みてるかどうか知らないけど前スレ 982 へ。 > encodingのauto-detectionに関しては俺も知りたいな。 > Mozillaのソースとか読むと良いのかな? > マルチプラットフォームでライセンス緩めの適当なライブラリがあると有難いんだが。 universalchardet っていう Mozilla 由来のライブラリがある。 ライセンスは、「MPL1.1/GPL2.0/LGPL2.1 のいずれかを選択」らしい。微妙だな。
25 名前:16 mailto:sage [2007/11/03(土) 17:48:57 ] どうもどなたもご存じないようなので別スレ行って来ます。
26 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:07:25 ] 低脳マルチ死ね
27 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:13:01 ] >>16 聞き方が悪いんだよ。ソースを切り貼りせずに、せめて関数ひとつくらいをそのまま貼ってくれ。 buffer がどこで確保されてどこで解放されてるのか、それに対してコピーをどこでやってるのかが さっぱりわからん。
28 名前:16 mailto:sage [2007/11/03(土) 18:17:18 ] >>27 わからない人の言い訳など聞く耳持ちません。
29 名前:16 mailto:sage [2007/11/03(土) 18:18:56 ] ほえほえ
30 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:21:39 ] >>28 俺もわからん 情報が不足しすぎてる コンパイルして実行できる(そのフフフという現象を確認できる)完全なプログラムを見せれと言いたい
31 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:22:34 ] アホすぎて教えるのに骨が折れる
32 名前:16 mailto:sage [2007/11/03(土) 18:31:57 ] >>31 教える資質が無い人というのもいますから、無理はしなくていいですよ。
33 名前:61 mailto:sage [2007/11/03(土) 18:36:00 ] >>32 覚える資質が無い人というのもいますから、無理はしなくていいですよ。
34 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:43:26 ] そうだぞみんな。無理はせず、スルーしようぜ。
35 名前:16 mailto:sage [2007/11/03(土) 19:00:41 ] >>27 pc11.2ch.net/test/read.cgi/tech/1190745673/l50 のスレ>>747 に書きましたのでよければ見てください。お願いします。
36 名前:nkkn5 [2007/11/03(土) 19:23:44 ] >>23 ありがとうございます。 試してみたのですが、unsigned char で うまくいきませんでした。 コード: //for (char i = 0; ; i++) { <--- もともと //for (char i = CHAR_MIN; ; i++) { <--- 実行時ERROR ! for (unsigned char i = 0; ; i++) { <--- テスト switch (i) { case '\a' : cout << "\\a"; break; case '\b' : cout << "\\b"; break; case '\f' : cout << "\\f"; break; case '\n' : cout << "\\n"; break; case '\r' : cout << "\\r"; break; case '\t' : cout << "\\t"; break; case '\v' : cout << "\\v"; break; default : cout << ' ' << (isprint(i) ? i : ' '); // <--- ISPRINTはここです } // 整数型にキャストしたものを表示 cout << ' ' << hex << int(i) << ' ' << dec << int(i) << '\n'; //if (i == CHAR_MAX) break; if (i == UCHAR_MAX) break; } つづく
37 名前:nkkn5 [2007/11/03(土) 19:24:44 ] つづき 結果:表示されるものがcharの場合は、 cout << ' ' << (isprint(i) ? i : ' '); での出力が、 その値が示す”文字”だったのですが unsigned charにすると、 文字にならずに”数値”になってしまいます。 coutがよくわかっていないのかもしれません。 coutでunsigned charで定義した変数を使って、その数値ではなく 文字を出力する方法を教えていただけませんでしょうか。 MSDNの件、ありがとうございました。 まだ自分のレベルからすると難しいですが。。。 結論を教えていただいた後なので該当箇所は 雰囲気としてはわかる、、、という感じです。
38 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:28:13 ] >>37 coutでの出力される形式は、データの型によって決まるから、 文字として出力したければchar型の値を渡す必要があるよ。 cout << ' ' << (isprint(i) ? static_cast<char>(i) : ' ');
39 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:30:52 ] char でループって普通はあんまりしないな。 for (int i = 0; i <= UCHAR_MAX; i++) { cout << (isprint(i) ? char(i) : ' '); cout << ' ' << hex << i << ' ' << dec << i << endl; } こんな感じでどうか。 (switchは面倒いから省略した)
40 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:32:13 ] isprint は isascii が偽の場合には未定義ではありませんか?
41 名前:nkkn5 [2007/11/03(土) 19:40:26 ] >>38 ありがとうございます! 結果自体は、うまくいきました。 すいません、新たな疑問です。 static_cast<char>で、 charの範囲外のははずの unsigned charが128以上の場合でも (私の環境での話です) なぜうまく文字になるのでしょうか。
42 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:40:31 ] 標準の C に isascii なんてありませんから
43 名前:nkkn5 [2007/11/03(土) 19:45:57 ] >>39 ありがとうございます。 こちらもできました。 ただ、すいません、41と同じ疑問があります。 そういうものなのでしょうか。
44 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:58:40 ] isprint は、 c < 0 and c ≠ EOF なる char c に対して未定義ではありませんか。
45 名前:nkkn5 [2007/11/03(土) 19:59:53 ] >>38 、39 すいません。 いただいたご提案では うまく行ってなかったみたいです。 charが負のときにisprinntなしで行うと カタカナの範囲も文字として出力されたのですが よく結果を見ていたら出力されておりませんでした。 範囲外のcastは やはり勝手な値になる?ようですね。 double--->intを実験したら、 (100000000000) intの最小値に無理やりcast後の値が なってしまいました。 (実行時エラーにも ならないものなんですねえ)
46 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:18:27 ] >>43 んーむ。 根拠は見つけられなかった。 正しくは for (int i = CHAR_MIN; i <= CHAR_MAX; i++) { cout << (isprint((unsigned char)i) ? (char)i : ' '); } と書くべきかもしれんね。 規格上は signed char の範囲外の値を signed char に変換したときの動作は実装依存らしいけど、実際にはそれが問題になったことはないな。 signed char と unsigned char は 1 対 1 で対応してるもんだと考えてる。 >>45 それはたぶんロケールのせい。 setlocale(LC_ALL, ""); を試してみそ。 ムダかもしれんが。
47 名前:nkkn5 [2007/11/03(土) 21:49:17 ] >>38 、39 さん (再) どうやら、うまく行っていなかったのも isprintのせいのようです。 isprintに128以上の数値を渡すと、 0が返ってきます(私の実験です)。 ---実験コード--- for (int i = 0; i <= UCHAR_MAX; i++) { cout << setw(3) << char(i) << ' ' ; cout << setw(3) << (isprint(i) ? char(i) : '-') << ' ' ; cout << setw(3) << isprint(i) << ' ' ; // <--- この部分128以上では0 cout << setw(3) << dec << i << endl; } ---------------- そのため、カタカナがでるような数値になると 私の前のコードではスペースに置き換えられて いたために出力されていないように見えて いたのだしょう。 つづく
48 名前:nkkn5 [2007/11/03(土) 21:50:54 ] つづき (訂正) いたのだしょう--->いたのでしょう なぜカタカナが非表示文字と判断されるのか、?です。 そういう仕様なんでしょうか。 ただ英語圏生まれのため、isprintとしては そういうことになるのかな、とも思っております。 違いますでしょうか。 また、上記のコードを、 setlocale(LC_ALL, ""); 後に実行すると、 ループ自体が128で止まってしまいます。 UCHAR_MAX自体は(表示させてみたところ) 255のまま変わっていないのですがね、、、 (こちらも?ですが、setlocaleは 私にはレベル的に早いかなーという気がします。 私の見ている本には載ってませんし。)
49 名前:nkkn5 [2007/11/03(土) 21:56:37 ] >>40 ,44 そうみたいですね。 先ほどこちらで教えていただきました。 (18です) 17--->18--->19--->23--->36,37 という流れをみていただけるとうれしいです。 結局のところ、今は、私が見ている本の前提である、 charの範囲が0から255ならば 「charの定義域全体に渡って、 ”表示できない文字はisprintを使ってスペースに置き換えながら" 文字と数値を一覧で出す」ことができるが、 charの定義域が-128から127である私の環境の場合、 うまくいく方法は見つかっておりません。 (とくにマイナス部分(カタカナなど)について) ”表示できない文字はisprintを使ってスペースに置き換えながら" ということを行わないのであれば話は簡単なのですが。 17で質問したときにはこんなに大事(オオゴト)になるとは 思っておりませんでした。。。
50 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:37:36 ] 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132 pc11.2ch.net/test/read.cgi/tech/1190261457/ こっちのスレで訊いた方が良いかもしれない。
51 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:48:17 ] 昨日、ドトネトのbitmapで質問にきた者です。 再び、VC++ 2005 EXPRESS で質問です。 msdn2.microsoft.com/en-us/library/ms533895.aspx ↑ここ見て、とりあえず線を引くところから初めてみようと思ったのですが、 外部参照 5 が未解決です。(リンクエラー?)がでます。 これは、ウィンドウズプラットフォームSDKのインストール後の設定になんか不備があるのでしょうか? それとも、ウィンドウズプラットフォームSDKのDLLを手動でリンカに設定するもんなのでしょうか?
52 名前:203 mailto:sage [2007/11/03(土) 22:50:06 ] >>22 なるほど、これでよさげな感じですね。 どうもでした。
53 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:59:14 ] C++でLinuxのTCP/IPネットワークプログラミングをする場合 自分でソケット関連のシステムコールをクラス化して 作るものですか?それとも既存のライブラリがあって、それを 利用するのが今の定石でしょうか? Cでソケットプログラミングはしてるのですが、C++で 同じことをする場合、自作のクラスの作り方の雛形 というか定石がわかりません。大体、形は決まってると 予想しているのですが。
54 名前:デフォルトの名無しさん [2007/11/03(土) 23:02:31 ] CでうごくならC++でうごく
55 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:03:38 ] ソケット用のstreamを作っちゃってる猛者もいたなぁ
56 名前:デフォルトの名無しさん mailto:ああわざとか [2007/11/03(土) 23:05:51 ] >>54 それは現段階では誤解を招くぞ
57 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:09:20 ] 関数の呼び出しを使って、整数xの2倍した値を返す関数を作りたいのですが下のソースでは、値が表示されません。 下記のソースでできるなら、どこが間違っているか、分かる方は教えてください。 この方法自体が間違っているのでしょうか。 #include <stdio.h> int dec(int y){ int z; z=y+1; return(z); } int inc(int y){ int z; z=y+1; return(z); } int mult2(int y){ int i,j; i=y,j=y; while(i>=0){ i=dec(i),j=inc(j); } return(j); } main(){ int i; i=6; printf("%d\n",mult2(i)); }
58 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:10:20 ] >>51 リンカ-入力-追加の依存ファイル にgdiplus.libを追加。 ソースに #pragma comment(lib, "gdiplus") って書いておく方が楽だけど。
59 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:12:34 ] >>57 値が表示されないという事は、 そもそもprintfが機能していないという意味なのだが。 そういう話なのか?
60 名前:デフォルトの名無しさん [2007/11/03(土) 23:14:05 ] int dec(int y){ int z; z=y-1; return(z); } int inc(int y){ int z; z=y+1; return(z); } int mult2(int y){ int i,j; i=y,j=y; while(i>0){ i=dec(i),j=inc(j); }
61 名前:57 mailto:sage [2007/11/03(土) 23:15:34 ] >>59 おそらくprintfだけの話ではなく、それ以前のソースが間違っているのだと思います。 その間違えを指摘してもらいたいです。
62 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:17:21 ] decなのに値が増えてないか? 無限ループじゃないの?
63 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:18:35 ] int dec(int y){ ×int z; z=y+1; ○int z; z=y-1; return(z); }
64 名前:デフォルトの名無しさん [2007/11/03(土) 23:30:54 ] さらに、 60のように while(i>0){ と >=ではなく、>
65 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:45:17 ] >>47-48 cout << setw(3) << char(i) << ' ' ;の行をコメントアウトしたら、 UCHAR_MAX == 255まで結果が出力されたぞ。 >>46 >>48 C++では、std::locale::global(std::locale(""))が Cでのsetlocale(LC_ALL, "")に相当する。 これには<locale>が必要。
66 名前:nkkn [2007/11/04(日) 00:25:05 ] >>65 ありがとうございます。 うまくいったみたいです。 まとめてみます。 ・setlocale(LC_ALL, ""); を設定しないと、 isprintは、カタカナ部分について 0を返してしまう。 なお、 cout << setw(3) << char(i) << ' ' ; はiが129以降でも出力自体はされる。 ・setlocale(LC_ALL, ""); を設定すると、 カタカナ部分についてのisprintの返り値が ちゃんと0以外(私の環境では255)になる。 一方、 cout << setw(3) << char(i) << ' ' ; はiが129以降は、(その出力行自体)なにも 出力されなくなる。 この部分をコメントアウトすれば、 途中で止まらず、カタカナも出力される。 これで合っていますでしょうか。 当初の質問の目的が達成されました! ありがとうございました。
67 名前:nkfを使って日本語ファイルをwstringへ読み込む関数出来たよ [2007/11/04(日) 01:03:45 ] #include <windows.h> #include <string> #include <vector> #include <fstream> using namespace std; void wreadfile(char *inputfile, vector<wstring> &z){ typedef int (__stdcall *FNC)(char*); typedef void (__stdcall *FND)(char* ,char*); locale::global(locale("japanese"));setlocale(LC_ALL,"japanese"); HINSTANCE hd = LoadLibrary("nkf32.DLL"); FNC SetNkfOption=(FNC)GetProcAddress(hd,"SetNkfOption"); FND NkfFileConvert=(FND)GetProcAddress(hd,"NkfFileConvert2"); int n;char *tempdir;n=GetTempPath(1, tempdir); tempdir = new char[n+30];GetTempPath(n, tempdir); char temfile[20]="nihongohenkanyo"; strcat(tempdir, temfile); SetNkfOption("-w16L0 -X -Lu -d"); NkfFileConvert(inputfile,tempdir); fstream fp(tempdir,ios::in | ios::binary ); static wchar_t wbuf[2][1024*1024+20]; int N,flg=0,k;wstring str=L""; while(!fp.eof()){ fp.read((char *)(wbuf[flg]), 1024*1024); for(N=fp.gcount()/2+5; wbuf[flg][N-1]==0; N--); wbuf[flg][N]='\0'; k=0;while(1){ for(n=k; wbuf[flg][n]!='\n'; n++) if(n>=N){str=(wstring)&(wbuf[flg][k]); flg=1-flg; goto end;} wbuf[flg][n]='\0'; z.push_back( str + (wstring)&(wbuf[flg][k]) ); if(k==0)str=L""; k=n+1;}end:}remove(tempdir);}
68 名前:デフォルトの名無しさん [2007/11/04(日) 01:05:57 ] 上のをヘッダファイルに入れて次のようにすれば、vector<wstring>型に1行ずつ入る #include <string> #include <vector> #include "wreadfile.h" using namespace std; main(){ vector<wstring> z; wreadfile("file",z); for(int n=0;n<z.size();n++)wcout<<z[n]<<endl; }
69 名前:57 mailto:sage [2007/11/04(日) 01:24:03 ] >>60 >>62-64 出来ました!ありがとうございました!
70 名前:デフォルトの名無しさん [2007/11/04(日) 04:16:17 ] すみません wcoutって危険( 認識できない文字があると落ちる )と思うので、wcoutを自作したいのですが 自作関数に置き換えられますか?
71 名前:デフォルトの名無しさん [2007/11/04(日) 04:20:46 ] void hyoji (wstring str)とかのほうがいいですかね?
72 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:27:49 ] basic_stringをカスタマイズすれば、できるんじゃね 名前空間に閉じ込めれば、wcoutって名前でそのまま使えるし
73 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:33:21 ] >>70 んなもんは用途に寄るだろ。UTF-8で吐けるんなら問題ねえし、エンコーディングが 仮定できないコンソール出力で、情報を全く失いたくないんなら、出力を フィルターすべきかもな。 boost::iostreamsなんかが使えると思うよ。
74 名前:デフォルトの名無しさん [2007/11/04(日) 14:24:32 ] CでIEの今現在開いているURLを得ることってできますか??
75 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:37:47 ] >>74 ActiveXを使う要領でできるけど道のりは遠い。
76 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:45:15 ] 今更、参照回数計測クラスを自作するのは時間の無駄でしょうか? やはりshared_ptrを使うのが当たり前ですかね?
77 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:10:22 ] >>76 よく分かってるじゃない。
78 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:28:45 ] >>76 「参照回数計測クラスを自作する」ことが目的じゃなければそうすべき。
79 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 18:06:08 ] >>77 >>78 レスどうも。C++の勉強のために一度作って動かして、 あとはライブラリを使用します。 仕事でC++を使うときに皆さんどうしてるのかなと思いまして。
80 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:09:26 ] MSDNの↓をC:/1111.bmpに変えて動かしてみたんだが、エラーがでるんだぜ。 なんでなんだぜ Image image(L"Grapes.jpg"); graphics.DrawImage(&image, 60, 10); ↓ Image image(L"C:/1111.bmp"); graphics.DrawImage(&image, 60, 10); あと、線を引いてみよう、文字列を書いてみようも試してみたんだが、画面がマッシロなままなのさ!
81 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:05:55 ] bccでcをやっています。最近OpanGLを始めました そうしたら影を付けるところで止まります。 コンパイルは出来るのに、実行すると止まります。 どうすればいいでしょうか。
82 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:18:04 ] どういう方法で影を付けようとしてるのかわからんから、答えようがない 具体的にどの関数をどういうふうに使ったのか それと、そこで止まるっていうのはどうやって確かめた? 実は他のところで止まってるのかもしれんぞ 「止まる」っていうのも、もう少し具体的に アニメーションしてるのが止まるのか、キーやマウスの反応がなくなることなのか、エラーメッセージが出て強制終了くらうことなのか、OSごと落ちるのか
83 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:20:27 ] つまりソースとエラーメッセージを出せ、と。
84 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 20:21:26 ] デバッガ…は無理そうだから、printf(MessageBox)デバッグだな。
85 名前:分からないから寝る mailto:sage [2007/11/05(月) 00:44:19 ] ボーランドのturbo c++(forWin95)を見つけたので図書館からTURBO C++ジョイフルプログラミングという本を借りてきたのですが・・・ 一番最初のたった5行の文がコンパイルするとエラーを吐きます main() { printf("C言語で遊ぼう\n"); while(!kbhit()); } 3.4行目共にCall to undefined function なんですがなにが悪いんでしょうか?
86 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:12:11 ] C++ではプロトタイプ宣言のない関数は呼び出せない。 ちゃんと適切なヘッダをインクルードする必要がある。
87 名前:デフォルトの名無しさん [2007/11/05(月) 01:48:19 ] Visual C++ 2005 EE と GCC ではちょっと動作が違うみたいですが、 どちらを使って勉強をすればいいのでしょうか?
88 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:13:05 ] さぁ?
89 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:16:04 ] 変数名の付け方で時々悩むのですが、 みなさん「ハンガリアン記法」ってのを使ってますか?
90 名前:80 mailto:sage [2007/11/05(月) 02:25:10 ] 仕事で強制されたら使うけど、個人的なプログラムでは使わない といっても、java使いなんで、Cだとどうなることやら エラーの原因がトンと分からなかったので、FromFileで読み込めるようなので試してみた。 Image::FromFile(L"1111.bmp"); Image::FromFile(L"C:\\1111.bmp"); Image::FromFile(L"C:/1111.bmp"); ぜんぶ0x00000000(null?)が返ってくる。なんで? 内部で画像の読み込みに失敗して、javaでいうヌルポでも発生してたんかしら?
91 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:30:19 ] >>87 GCCの方が文法に厳しいので勉強するならGCC
92 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:35:18 ] こういう時に注意かな for(int i=0;i<10;i++) cout << i << endl; cout << i << endl; で、いらないテクニックを覚える…と #define for if(1)for
93 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 07:59:41 ] >>89 タイプの方なら自然と使ってる。ってか便利。 システムの方は自然と使わなくなった。
94 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 08:16:02 ] >>92 さすがに、それはVC++でもNET 2003あたりから コンパイル通らないほうがデフォルトになった。 >>93 それをいうならアプリケーションハンガリアンではないのか?
95 名前:デフォルトの名無しさん [2007/11/05(月) 12:21:07 ] index が1000万あるとします indexごとにファイルを読みに行くとします このとき、ファイルを一つにまとめるのと、一つ一つ分けるのと、いくつか束にするのではどれが速度速いですか? ランダムに3個程度のindex値をアクセスすることにします
96 名前:デフォルトの名無しさん [2007/11/05(月) 12:29:25 ] 一ファイル当たり10KB以下として、indexは10万とします このときファイルサイズは最大1Gになります indexは、0から10万の数字で与えられるとします indexごとにファイルの位置を記録しておくか、index名のファイルを10万用意するかですが どっちが良いですか?
97 名前:デフォルトの名無しさん [2007/11/05(月) 13:00:49 ] あまり細かく分けると、クラスタサイズの制限から容量多く使ってしまいますね 10バイトしか記録しなくても512バイト程度使ってしまいますね
98 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:31:55 ] Unicode, ShiftJIS, EUC あたりを相互変換できる文字コードライブラリを探しています。 ・言語はCオンリー ・ライセンスがBSD以下のゆるさ ・サイズはなるべく小さめ ・ポータブル の条件に合うよさげなライブラリがあったら教えてください。 よろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:53:16 ] スレ違いでね?
100 名前:デフォルトの名無しさん [2007/11/05(月) 16:58:31 ] 配列の入力の時に,EOFだと-1入力で終了になりますよね? 改行で入力終了にしたいのですが,どうすればいいですか? 1 1 0 0 1 0 1 1 改行 で入力を終了したいです。 教えてください。よろしくお願いします。 //---- 配列入力 num = 0; do { scanf("%d", &arr[num]); } while ( arr[num++] != EOF ); // 改行は入力の終了 num--; // 有効な入力数
101 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:45:46 ] >>100 マルチすんなカス
102 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:23:00 ] >>100 char buf[MAXSIZE]; char *p; fgets(buf, 99, stdin); p = strtok(buf, " "); while(p != NULL) { arr[num++] = atoi(p); p = strtok(NULL, " "); }
103 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:24:02 ] >>100 訂正 char buf[MAXSIZE]; char *p; fgets(buf, MAXSIZE - 1, stdin); p = strtok(buf, " "); while(p != NULL) { arr[num++] = atoi(p); p = strtok(NULL, " "); }
104 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:26:35 ] 他の言語のソースを移植すれば良くね? サイズ小さいライセンスも気にしない
105 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:48:49 ] -Lオプションで指定したディレクトリのうち その中にある特定のディレクトリを参照させないようにするにはどうすればいいですか? たとえば -L/usr/local/lib と指定したもののうち /usr/local/lib/gcc-4.0.4 は参照しないようにする とかいう感じです
106 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:02:23 ] >>95-96 速度は実測が基本。 良い悪いの判断は本人にしかできない。
107 名前:デフォルトの名無しさん [2007/11/05(月) 21:07:59 ] 巨大なファイルのシーク時間と、ファイルのオープンに要する時間は一般的にどっちがかかるんですか? ファイルのオープンの方がコストは多そうですが
108 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:09:47 ] >>107 聞く前に試せよサル
109 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:20:47 ] >>107 聞く前に試せよサル
110 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:44:45 ] >>107 使用するファイルシステムによっても違うしだろうし、ファイルシステム上の断片化などの状態にも依る。 キャッシュに乗ってるかも影響するはず。 試せ。
111 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:21:46 ] C++でAPIを組んでいるのですが ttp://www.katsakuri.sakura.ne.jp/src/up29024.txt.html この項目を入れたら 0x00412984 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00090f44 を読み込み中にアクセス違反が発生しました。 とエラーが出るようになったのですが、どこがおかしいのでしょうか? 作っているプログラムの内容は、チェックボックスにチェックが入っているところにEDITボックスを表示する、と言う感じです。 選択した場所によってはうまく動作することもあります。
112 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:37:59 ] ぶった切り失礼します 文字列をlongに変換するstrtol()という関数ですが 失敗時の返り値が0なのはいいのですが、文字列が"0"だったときの区別のつけ方は 変換不可能な文字列へのポインタの格納先を準備してあげるしかないのでしょうか?