1 名前:デフォルトの名無しさん [2007/06/25(月) 12:01:46 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.38【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1180877635/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
718 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 09:55:26 ] 2005もDebugとReleaseで違うしな
719 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:51:23 ] 質問です。 基本的にMFCのDoc-Viewを用いたプログラムです。自分で生成した特定の ウィンドウのスナップショットを、画像に保存したいのですが、どのようなアプローチで 進めたらいいのか悩んでいます。 1. 非アクティブまたは非表示な場合でも、フレームを含めたウィンドウ全体を 画像として取得するような手段はあるのでしょうか? 2. 1.が不可能なら、非アクティブまたは非表示で、ウィンドウの内容(例えばCViewの 中身)のみを取得する手段はあるのでしょうか? XP VC2005 SP1
720 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:07:13 ] fgets(str,N-1,stdin); printf("%d",(int)strlen(str)); ↑な感じのコードを書いて実行させると、 【実行画面】 >hoge 5 となるのですが、これってどうなっているのでしょうか?
721 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:12:05 ] hogeの後に改行文字がくっついてて、それも数えられてるから
722 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:14:58 ] あぁ、改行文字を読み込んでたのか! ヌル文字は入れないはずなのになんでかと思ったら…。 >>721 サンクスです!
723 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:00:52 ] >>718 2005だとRelease,Debugとも基本的にNOPは使ってないよ。
724 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:24:29 ] char str[10]="piyo"; これでstrが指す場所を"yo"にしたいのですが、 どうすれば良いでしょうか?
725 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:25:23 ] >>724 strcpy(str, "yo");
726 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:28:13 ] >>725 char *str2 = &str[2];
727 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:31:52 ] >>725 文字列をコピーしたいってより、yoの場所まで移動させたいのです。 array[i++]=strtol(str,&err,0); これを繰り返し行う際にstrをstrから任意のバイト分進めた値にして 文字列を完全に走査、数値格納したいのです。
728 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:39:50 ] そのstrは配列だからそもそも指すとかそういう表現はしない &str[2]とかstr+2好きなように表記すればよか これが気持ち悪いなら別途charへのポインタ用意して char *p=str; とした後に読み進めたいバイト分だけp+=2みたいにインクリメントすればいい
729 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:41:26 ] char* p = &str[2]; でいいんじゃね
730 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:44:48 ] str[i]2
731 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:46:04 ] >>727 strtol の使い方が知りたかっただけなんだね #include<stdio.h> #include<stdlib.h> int main(void){ long value[100]; char str[]="100 200 300 400 500 x 600 777"; char *ptr=str, *endptr; int i, value_num=0; for(value_num=0;value_num<100;value_num++){ value[value_num]=strtol(ptr, &endptr, 10); if(ptr==endptr) break; ptr=endptr; } for(i=0;i<value_num;i++){ printf("%ld\n", value[i]); } return 0; }
732 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:47:28 ] >>726 ,>>728-729 なるほど、ありがとうございます。 それを参考にちょっと今から思った通り出きるか作ってみます。
733 名前:732 mailto:sage [2007/07/11(水) 00:34:56 ] で、出来た…。 >>731 さんのものを参考に、一行にある複数数字(途中非数字あり) を格納して表示するプログラムを作ってみました。 これってあと直すところとかどうでしょうか? >12 32 aaa43jfie55 32 たとえば入力が上のようなら、 12,32,43,55,32が配列に格納されて表示される仕様です。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 256 int main(void){ long value[N]; char str[N]; char *ptr=str, *endptr; int i, value_num=0,l; fgets(str,N,stdin); l=strlen(str)-1; for(i=0;i<l;i++){ if(strtol(ptr, &endptr, 10)!=0) value[value_num++]=strtol(ptr,&endptr,10); ptr=++endptr; } for(i=0;i<value_num;i++){ printf("%ld\n", value[i]); } return 0; }
734 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 00:37:08 ] #define N 256
735 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 00:37:13 ] あれ、>>732 で>>731 さんへのアンカを入れ忘れてました…。 申し訳ない、>>731 さんも激しくありがとうございます。
736 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:01:54 ] どなたかC++に詳しい方、教えてください。今日、はまりました。 以下ClassAに、オーバロードしたfunc()という関数が2つがあるとします。 ClassAを継承したClassBをnewし、classb->func(NUM_2);をコールすると、期待通りに ClassA::func(NUM)がコールされるのですが、(1)だけオーバライドしたClassCを newし、classc->func(NUM_2);をコールするとClassC::func(int, NUM)がコールされて しまいます。 期待した動作はClassA::func(NUM)がコールされる事でした。 これはC++の仕様なのでしょうか。コンパイラがどういう論理でenumを使用した関数の オーバライド/オーバロードを解決しているのかご存知の方、ご教示お願いします。 enum NUM { NUM_1, NUM_2, NUM_3 }; class ClassA { virtual int func(int a, NUM b = NUM_1); // ←(1) virtual int func(NUM a = NUM_1); // ←(2) }; class ClassB : public ClassA { // ClassAの(1),(2)はオーバライドしていないクラス }; class ClassC : public ClassA { // ClassAの(1)だけをオーバライド int func(int a, NUM b = NUM_1); };
737 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:03:17 ] つwww.fides.dti.ne.jp/~oka-t/cpplab-hide-overload.html
738 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:06:12 ] 呼び出し側のコードはどうなってんの
739 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:12:08 ] NUMばっか出てきてとか見づれーんだよ。もっと考えて書けよドカスが >classc->func(NUM_2);をコールするとClassC::func(int, NUM) 理由は>>737 だ ClassCでfunc(int,NUM)を宣言しちゃったから、ClassAのfunc(int,NUM)が見えなくなってる。 あとvirtualな関数にデフォルトパラメータつけるな
740 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:58:14 ] >>737 >>738 >>739 見づらくてすいません。 C++にそんな仕様があるとは知りませんでした。 ありがとうございました。 参考までに >あとvirtualな関数にデフォルトパラメータつけるな は何故でしょうか?
741 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:10:29 ] デフォルトパラメータは静的な型に依存する class B{ virtual void foo(int a=300){std::cout << a;} } class D{ void foo(int a=100){std::cout << a;} } B* pb = new D(); pb->foo(); //300と表示される D* pd = new D(); pd->(foo); //100と表示される だった筈
742 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:11:50 ] >>741 > pd->(foo); モチツケ
743 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:24:20 ] >>741 なるほど。納得しました。 ありがとうございます。
744 名前:デフォルトの名無しさん [2007/07/11(水) 10:08:49 ] >>188 PHPアプリとCアプリとログ出力先を共通化という 無茶な事を要求されているときも 行単位の一発書き込みなら大丈夫かな? 2プロセス立ち上げてそれぞれ適当に書き込みをさせて 100万回くらいテストしたんだけど これで混ざんなかったから 多分大丈夫だよね?
745 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 10:52:14 ] >>744 「行単位の一発書き込み」がシステムコールレベルでそうなっているなら大丈夫。 具体的には、(直接的または間接的に)O_APPENDでopen()されており、write() 一発で1行を書き込んでいるなら大丈夫。 それから少しでもズレるならダメ。 Win32の場合、O_APPENDに相当する機能がCreateFile()に存在しないので、 *必ず*排他が必須になるようだ。
746 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 14:55:19 ] 質問失礼します。 シャノンの符号化法による符号語生成プログラムと、 表計算ソフトを用いた符号語生成の違いについて説明して頂けないでしょうか? よろしくお願いします。
747 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 16:23:30 ] >>746 表計算ソフトを用いた符号語生成って、何のことか教えて。
748 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:59:26 ] >>743 ちなみに741の問題を回避するためにもNVIパターンが使えるぞ。
749 名前:デフォルトの名無しさん [2007/07/12(木) 08:23:23 ] すみません string型でファイル名を持っているとき、それをオープンしようとすると エラーが出ます。char型にするにはどうすれば良いですか?
750 名前:749 [2007/07/12(木) 08:26:48 ] 自己解決しました
751 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:26:59 ] つc_str()
752 名前:デフォルトの名無しさん [2007/07/12(木) 08:27:49 ] ありがとうございました
753 名前:デフォルトの名無しさん [2007/07/12(木) 08:51:04 ] ファイルを読み込むとき、終端で必要以上のサイズを 読み込むと配列が最後まで埋まってしまいます どうすれば実データのみ読めますか?? fp.read(str,N); とすると strのサイズはNになります
754 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:58:00 ] 何使って読み込んでるの? fp の型は?
755 名前:デフォルトの名無しさん [2007/07/12(木) 09:04:02 ] fstream fp ("filename", ios::in | ios::binary ); なんですけど、fp.read(str,N); の戻り値は、istream 型です どうすればサイズがわかりますか??
756 名前:755 [2007/07/12(木) 09:24:03 ] 自己解決しました fp.gcount();で読み込みサイズが出ました