- 1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.48【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1202141921/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 712 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:26:04 ]
- 一週間くらいは覚悟しないといかんね
- 713 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:39:36 ]
- 一年ぐらいは(ry
とか言いたいけど最低10年とかいう意見もあるし やね某が何年か前に提唱した半年ぐらいで勘弁しておいてやろう
- 714 名前:デフォルトの名無しさん [2008/02/25(月) 18:04:09 ]
- 質問ですが、stringの+は、\0を特別視しませんよね?
"aa\0aa" + "bbbbb"はどのコンパイラでも、 "aa\0aabbbbb"ですよね?
- 715 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:38:41 ]
- いつからCは+演算子で文字連結できるようになったんだ
- 716 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:39:19 ]
- stringと書いてあるだろうがアホ
- 717 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:43:10 ]
- >>716
>>714はC++でもNGだろ。C文字列同士だぞ。
- 718 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:45:36 ]
- そこは中身がそうなっているstringインスタンスだと解釈してやろうぜ。
- 719 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:48:48 ]
- 質問者はそういう中身のstringを造ろうとしてそこでつまりそうだが
- 720 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:21:16 ]
- >>718
アイアイ
- 721 名前:デフォルトの名無しさん [2008/02/25(月) 19:30:23 ]
- std::auto_ptrって、ブロックを出ると自動的に開放されるポインタですよね?
これって、AUTO変数と比べてより便利な点ってあるのでしょうか?
- 722 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:36:53 ]
- ×ブロックを出ると自動的に開放
○std::auto_ptrが破棄されたときインスタンスも自動的に開放
- 723 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:37:01 ]
- >>721
・スタックに置くには適さない巨大なデータも置ける ・最初はNULLにしておいて必要になってからnewできる ・ブロックを出るまで待たなくても好きなタイミングで削除できる ・releaseで手放せばブロックを出ても削除しないことも出来る
- 724 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:39:10 ]
- 関数の戻り値にも使えるはず。
- 725 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:41:51 ]
- using namespace std;
string func1() { string s = "Hello"; return s; } void func2(string s) { cout << s << endl; } int main() { func2(func1()); } この渡し方って解放されなかったり破壊されたりしますか? 処理系によりけりですか?
- 726 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:43:39 ]
- >>725
しません。 どの処理系でも平気。
- 727 名前:デフォルトの名無しさん [2008/02/25(月) 19:59:12 ]
- >>722-724
ありがとうです。 ところで、testは適当なクラスとして、 int main() { std::auto_ptr<test> tp(new test); tp.release(); return 0; } とすると、メモリリークが検出されてしまうのですが、tp.release()をしないようにすると 大丈夫でした。これってrelease()の使い方が間違ってますか? あと、最初にauto_ptr<test>だけ宣言しておいて、途中でnew testする方法もわかりません。 もうちょっとだけ教えてくださいな。
- 728 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:05:08 ]
- releaseは、以後、自分でメモリ管理するからauto_ptrはdeleteするなというもの。
- 729 名前:デフォルトの名無しさん [2008/02/25(月) 20:14:08 ]
- >>728
最初は、 std::auto_ptr<test> tp(new test); tp.release(); test* tp2 = tp.get(); delete tp2; としていたのですが、以下のようにしなければならないということですね。 std::auto_ptr<test> tp(new test); delete tp.release(); ありがとうございました。
- 730 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:27:13 ]
- >>729
tp.reset();
- 731 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:44:23 ]
- resetはVC6のauto_ptrには無いとか言い出すぜきっと。
- 732 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:52:38 ]
- resetもしないでデストラクタに任せればいい場面にまで
729のようなことをしていないか不安。
- 733 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:58:49 ]
- 設計について色々調べていると(デザインパターン等々)これ無駄じゃね?みたいな部分に多々遭遇します
例えばコンストラクタとデストラクタで確保&解放を行う為に全体をそれに合わせたり それの為にメソッドやクラスを用意したり等々 確かに見通しもよくなりますし、わかりやすくなるとは思うのですが、 それらを犠牲にすれば短く出来たりオーバーヘッドを減らせたり出来るんじゃないか?と考えてしまいます つまりコード全体の見易さ、転じてメンテナンスが容易になるなどのメリットと 速度を犠牲にするというデメリットがあると思います とはいえ後者は今時気にするほどでもなく、詳しくないのですがここを気にするのは組み込み系と呼ばれる分野くらいなのかなとも思います 実際はやはり見易さ等を気にした手法(なんていうんだろう?)を用いて設計を行うべきなんでしょうか? うまく表現できなく、長くなってしまってすみません
- 734 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:01:16 ]
- Visual Studioって 何処にヘッダファイル置けば
- 735 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:04:18 ]
- Visual Studioって 何処にヘッダファイル置けば
フルパス指定しなくて読み込めるんですか? C:\Program Files\Microsoft Visual Studio 8\VC\include でOK?
- 736 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:06:29 ]
- >>735
ソースファイルと同じ場所なら #include"hoge.h" でおk
- 737 名前:デフォルトの名無しさん [2008/02/25(月) 21:09:06 ]
- >>733
大丈夫 君よりコンパイラのほうが賢いから
- 738 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:09:18 ]
- 速度犠牲とか偉そうに言うやつほど、ダメなプログラマ
- 739 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:10:01 ]
- 普通の初心者質問には答えないんだなぁ
- 740 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:11:48 ]
- 本当に遅くなることばかりじゃないしな。
std::sort が qsort より概して速くなる、というみたいに、 インライン化されると問題ないことも多い。
- 741 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:14:36 ]
- >>738
色んな分野があるって前提で考えてるんだろう? お前は組み込み系とビジネスソフト開発が同じだと思っているのか? それにプログラミングしてればみんなプログラマって思考が気持ち悪い お前見たいのは答える側に回るな
- 742 名前:デフォルトの名無しさん [2008/02/25(月) 21:14:59 ]
- プログラマではないです、ただいろんな分野があってそれに合ったプログラミングがあることくらいはわかっています
でもやっぱり速度は気にしちゃいけないところですか、無駄だと思ってしまうところから直す必要がありそうですね コンパイラの最適化というのも知らない分野ですし、当分は見通しの良いプログラムを目指してみようと思います
- 743 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:18:54 ]
- まず動くプログラムを書く。
そして遅ければ改善する。 この順だな。
- 744 名前:696 mailto:sage [2008/02/25(月) 21:19:34 ]
- 696です。
先ほどのプログラムを訂正したら、 一行ほどしか出力されませんでした。 どこが間違っているのでしょうか。 ttp://www.borujoa.org/upload/source/upload17009.txt
- 745 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:26:58 ]
- これをちょっと弄って横長から縦長にしたいのですが、
いまいち組み方がわかりません。環境はLinuxでコンパイラはgccです。 #includeは省略 #define max 50 using namespace std; class hist{ private: string buffer; int count; int mat[max],i,j; public: int func(char *argv[]);}; int hist::func(char *argv[]){ ifstream fin(argv[1]); if(!fin)return 0; for(i=0;i<max;i++)mat[i]=0; while(fin>>buffer){ count=strlen(buffer.c_str()); for(i=1;i<max;i++){ if(i==count)mat[i]=mat[i]+1; } } for(i=1;i<max;i++){ cout<<i; for(j=0;j<mat[i];j++)cout<<"*"; cout<<'\n'; } return 0;} int main(int argc,char *argv[]){ hist hoge; hoge.func(argv); return 0; }
- 746 名前:696 [2008/02/25(月) 21:28:43 ]
- すみません、あげるの忘れてました。
どなたか教えてください。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:32:49 ]
- GNU global使えていう話じゃなくて?
- 748 名前:744 [2008/02/25(月) 21:37:58 ]
- >>747
そんなソフトがあったんですかw ありがとうございます。 しかしそれではコーディングトレーニングにならないので、 ソースコードでよろしくお願いいたします。 どう考えてもイメージがわかないもので質問した次第です。
- 749 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:44:30 ]
- はじめまして
C++でプログラミングをしようと思っているのですが 開発環境等をどうしようか迷っています 将来的には ■ゲームを動かすプログラム(同人やエロゲのアプリ程度) ■補助ソフトやパッチ ■データを暗号化して格納するプログラム 等を作りたいと思っています 何かアドバイスがあればお願いします
- 750 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:45:47 ]
- VC++ でいいっしょ
タダだし
- 751 名前:744 [2008/02/25(月) 21:48:04 ]
- >>749
「C++の勉強したいんだがどの本買って勉強したらいいんですか?」 って聞いてるのと一緒だべ?
- 752 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:50:19 ]
- デザインパターン信者
私にもそんな時期がありました(マジで)
- 753 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:51:50 ]
- 80:20の原則があるしな。経験つめばどこがホットスポットなのかが見当つくから、
プロファイルとってそこだけしぼって最適化すればいい。 最初から保守性犠牲にしてまでパフォーマンスチューニングが必要な分野って 限られてると思うよ。
- 754 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:55:02 ]
- >>749
今からC++勉強するよりもおまいは吉里吉里勉強したほうが幸せになれると思う
- 755 名前:744 [2008/02/25(月) 22:06:01 ]
- マイヘッドがクラッシュしてしまいそうなんですが、
エニバディー、ティーチ ミーしてくれませんか?
- 756 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:16:44 ]
- >>752
理解できずに挫折したか。
- 757 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:16:59 ]
- トオルさん帰れよ
- 758 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:18:58 ]
- >>744
関係はないが、とりあえずバッファを buffer_size しか確保してないのに fgets で filesize 読もうとしてるのはヤバい。
- 759 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:28:27 ]
- >>744
else if(count > 0)
- 760 名前:744 [2008/02/25(月) 22:29:05 ]
- >>758
bufferはstring型でいこうとおもったんですが、 fin>>buffer;でやると、単語読み込みで一行読み込みにはならないし、 fgets(buffer.c_str(),filesize,fin);はコンパイラに怒られるし、 どうしようもないんで駆け込み寺としてここにきました。 たぶんこれも慣れた人なら簡単に直せるんだとは思いますが、 いままでC言語ばっかりやってたもんで、変な癖ついてるんです。
- 761 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:30:58 ]
- getline を知らんのか?
- 762 名前:744 [2008/02/25(月) 22:32:36 ]
- >>761
K&Rにも載ってたんで知ってます。
- 763 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:32:53 ]
- >744
よくわからんが、 一行よむなら、std::.getline( fin, buffer );だが。むろん、finはifstream辺りの必要はある。 初めて"{"が存在する行をみつけたとき、上のifでcount++になって、 下のifも成立してでcount++で2になるんだが、そういうものなのかね?
- 764 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:33:42 ]
- どこのK&Rだ、どこのw
- 765 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:35:10 ]
- >>750
あと必要な物はやる気と根気ですかね? >>751 "だべ"ってどういう意味ですか? マルチリンガーじゃないので日本語以外わからないんです、本当にごめんなさい。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:36:48 ]
- >>765
キモス
- 767 名前:744 [2008/02/25(月) 22:43:14 ]
- >>759
else ifですか。基本的なところ躓きました。 ありがとうございます。勉強になりました。 >>763 そんな関数があったんですか。 ちょっとgetlineの中をのぞいて使わせてもらいます。 >>764 Cアンサーブックのほうです。 バイブル本とか釣られてやってみたけど、 糞面白んないんで解くのやめました。
- 768 名前:デフォルトの名無しさん [2008/02/25(月) 22:44:52 ]
- 可変のchar *のバッファ用意したいとき
string buf (n, '\0' ); &buf0]; ← これはchar*のところへ入れられる と使うと便利だ 自動で消滅するし
- 769 名前:744 [2008/02/25(月) 23:06:24 ]
- >>768
下のほうhtmlのタグみたいですね。 奥の手っぽいんでどうしようもないときに使ってみます。 ありがとうございました。
- 770 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:48:16 ]
- >>744
さっき、恐らくは想定したと思われる仕様を完璧に満たすソースを書いたんだが、 反応がなかったから会社に置いてきちゃった。次に会社に出るのは3日後なんで、 後で寝ちゃわなければ軽く再現してみるよ。
- 771 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:57:46 ]
- >>770
>次に会社に出るのは3日後なんで 何でだ?
- 772 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:01:47 ]
- なんか、「それを記すにはあまりにも2chの投稿制限は厳しい」みたいに
続きそうな文章だなw
- 773 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:08:58 ]
- >>749
本体 > VC++ 開発用ユーティリティ > TurboC++ Exploer (BCB) でいいんでないの? VC++はGUIアプリの構築はそれなりに手間かかるし、BCBは紙芝居の開発じゃ全然VCLの長所が生かせない。
- 774 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:16:21 ]
- >>771
単に、明日明後日は客先直行直帰だから。 >>744 手直ししながら、「クラスにする必要ないじゃん」とか 「変数は極力局在化しろよな」とか「マクロシンボルは大文字だろ」とか 「入力にfgets()を使うなら出力はfputs()じゃないか」なんて乗りで 修正してたらこうなった。 #include <cstdio> #include <cstring> #define BUFFER_SIZE 1000 int func(char *argv[]) { FILE * fin = fopen(argv[1],"r"); if (fin == NULL) return 1; unsigned count = 0; char buffer[BUFFER_SIZE]; while(fgets(buffer, sizeof(buffer), fin)!=NULL) { if (count == 0) { if (strchr(buffer,'{') != NULL) { fputs(buffer, stdout); count++; } } else if (count > 0) { if (strchr(buffer,'{') != NULL) count++; if (strchr(buffer,'}') != NULL) count--; fputs(buffer, stdout); } } fclose(fin); return 0; } int main(int argc,char *argv[]) { return func(argv); }
- 775 名前:744 [2008/02/26(火) 00:36:44 ]
- >>774
まぁ人には癖があるからね。 ありがとう。 人と自分のソースを比較するのが、 一番勉強になるよ。
- 776 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:45:12 ]
- >>775
>774は常套句の宝庫だと思うよ。fgets(buffer, sizeof(buffer), fin)とか。 >744のクラスは、変数をばら撒くだけでクラスとしては何もしない無意味な設計だったし。 後はあれだな、関数に渡すのはconst char *にしてmain()で予めargcのチェックと argv[1]の抽出位しておくのが常套手段か。
- 777 名前:744 [2008/02/26(火) 00:57:36 ]
- >>776
途中で配列にしたら楽だろうなぁとかは思ったが、 配列だと途中でサイズの変更が利かないから。 ポインタだと動的メモリの割り当てで適当なサイズに 割り当てできるし、と思っただけです。 別に機能さえあってればどのやりかたでもいいんだけど、 個人的には stdoutの使い方がいまいちわかんなかったから、 そこが勉強になったのと、マクロの名前が大文字ね。 それ完全に忘れてたから勉強になった。 ありがとうってのは主にそこかなぁ・・・。 クラスは再利用に機能を発揮するから今の段階では必要としていないけど、 あとあと拡張していくにあたって必要になってくるから残しておきました。 確かにこの辺は言わんとわからんかったかもしれない。 突っ込まれたんで補足しておきました。
- 778 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 05:08:28 ]
- >726
ありがとう、ちょっと不安だったんだ。 名前も無いまま渡されるオブジェクトってどうなるんだろ、って。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 05:56:26 ]
- ある関数に引数として構造体のポインタを渡し、そこにアドレスをセットして
返してもらうにはどう書けばよいのでしょう? BOOL hoge( HOGE *ptr ) { …略 ptr = address; return TRUE; } としても上手く動かないようです。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:00:17 ]
- >>779
整数を受け取るには整数のポインタを渡す必要がある。 構造体を受け取るには構造体のポインタを渡す必要がある。 構造体のポインタを受け取るには構造体のポインタのポインタを渡す必要がある。
- 781 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:03:19 ]
- あ!なるほど。こんな感じでしょうか?
BOOL hoge( HOGE **ptr ) ちなみにC++なのですが、参照渡しを使ってこれは良いのでしょうか? BOOL hoge( HOGE *&ptr ) 一応コンパイルは通るのですが…
- 782 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:25:27 ]
- OK
- 783 名前:デフォルトの名無しさん [2008/02/26(火) 11:34:24 ]
- 同じクラスなら、別のインスタンスのprivateなデータも参照出来ますよね。継承関係が
ある場合には、親オブジェクトから子オブジェクトを通して親オブジェクトのprivateデータを 参照できたのですが、これってこういうもの? #include <iostream> using namespace std; class test2; class test { public: void func(const test2 &a); private: int p; }; class test2 : public test { public: void func2(const test2 &a); }; void test::func(const test2 &a) { cout << a.p << endl; } test2 T2; int main() { test t; t.func(T2); return 0; }
- 784 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:37:48 ]
- そういうもの。
- 785 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:40:09 ]
- >>783
というか出来ないとまずいだろ。 コピーコンストラクタとか代入演算子の定義が出来なくなってしまうよ。
- 786 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:06:04 ]
- protectedじゃなくてもアクセス出来ちゃうの?
- 787 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:22:23 ]
- protectedにすると、さらにtest2からも参照できるようになる
- 788 名前:デフォルトの名無しさん [2008/02/26(火) 13:01:03 ]
- プログラムにZIPを解凍する機能を盛り込みたいのですが、そのような
機能のスタティックリンクできるライブラリをご存じないでしょうか? 環境はVisualC++.net2003です。
- 789 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:07:03 ]
- >>788
zlib
- 790 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:30:25 ]
- >>783じゃないが試してみたけど
同じクラスのインスタンスへの参照やポインタを持つとアクセス権限ブッチぎれちゃうのか なんかカプセル化とかそういう面で考えると気持ち悪いというかなんというか 仕様上出来ないと仕方ないと言うのも分かるのだが・・・
- 791 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:33:53 ]
- 789d
- 792 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:34:46 ]
- C++のprivateはクラスプライベートであってインスタンスプライベートの意味ではない
- 793 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:02:36 ]
- >>782
すみません、寝てました。返答有難うございます。 ちなみに「ポインタ変数を参照で渡す」と言う意味ならむしろ BOOL hoge( HOGE &*ptr ) のような気がするのですが、なんで*&ptrなのでしょう? それが仕様と言われればそこまでですが。
- 794 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:24:18 ]
- >>793
kmaebashi.com/programmer/pointer.html これの応用。 ptrのほうからreference to pointer to HOGEと読める。
- 795 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:26:03 ]
- >>793
typedef HOGE * HOGE_PTRしてみれば判る。
- 796 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:37:54 ]
- >>794>>795
なるほど。正直きちんと理解できたかは自信ないですが、ちゃんと法則が あってそうなっているのは分かりました。 どうも有難うございましたm(__)m
- 797 名前:デフォルトの名無しさん [2008/02/26(火) 14:46:05 ]
- vc2008のコマンドラインコンパイラだけ手に入りますか
vc6でコンパイルしたいです sp1で鈍いパソコンです
- 798 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:48:16 ]
- EEを入れてみたか?
- 799 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:49:23 ]
- >>797
コンパイラだけ手に入れるのは無理だが コマンドラインでの利用はできるよ
- 800 名前:デフォルトの名無しさん [2008/02/26(火) 14:56:40 ]
- sp1にインストールできますか
- 801 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:02:40 ]
- >>792
kwsk according to standard
- 802 名前:デフォルトの名無しさん [2008/02/26(火) 15:49:24 ]
- すみません
DOSの実行ファイルで、標準出力へは書き出されないメッセージを取得する方法ありませんか? hoge.exe > log.txt として取得できないやつです 画面には出ます 標準出力、標準エラーの取り方はわかります
- 803 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:09:38 ]
- >>802
それのどこがC/C++に関係があるの?
- 804 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:18:38 ]
- >>802
つ printscreen
- 805 名前:デフォルトの名無しさん [2008/02/26(火) 16:34:10 ]
- >>803
標準出力はこれで受け取れますが、exeが返す実行結果がとれません #include <windows.h> main(){ HANDLE hFile = CreateFile("log.txt",GENERIC_WRITE,FILE_SHARE_WRITE, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); SetStdHandle(STD_OUTPUT_HANDLE , hFile); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si));ZeroMemory(&pi, sizeof(pi)); si.cb = sizeof(si); si.hStdOutput =hFile ; si.hStdError =hFile ; si.wShowWindow = SW_HIDE; CreateProcess(NULL, "HtoX32c.exe e:\\0.htm ", NULL, NULL, FALSE,0, NULL, NULL, &si, &pi); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); CloseHandle(hFile); }
- 806 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:51:04 ]
- HtoX32とやらが標準エラー出力に出している可能性は無い?
そもそも、まさかHtoX32はWindowを持っているアプリケーションなのか? だとしたら、メッセージフックなどの手段が必要になるよ。 つーか、HtoX32とやらが何ものかにも依るけど同等のプログラムを自分で書いた方が手っ取り早かったりしてね。
- 807 名前:デフォルトの名無しさん [2008/02/26(火) 16:59:39 ]
- HTMLをテキストに変換するプログラムです
ソースが公開されていたり定番のライブラリとかありませんか?
- 808 名前:デフォルトの名無しさん [2008/02/26(火) 17:03:03 ]
- 正規表現での消し方のサンプルみながら自分でやってみます
- 809 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:11:51 ]
- >>805
support.microsoft.com/kb/190351/ja
- 810 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:15:43 ]
- popenを使えたら楽だな
あればだけど
- 811 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:44:11 ]
- >>805
そのコードだと、自プロセスの標準出力が hFile になるけど、子プロセ スの HtoX32c.exe の標準出力はコンソールのままでは?
- 812 名前:デフォルトの名無しさん [2008/02/26(火) 17:44:15 ]
- 1つの関数に複数の構造体を渡すことって可能でしょうか?
suruct typedef{ int x,y; }SAMPLE; SAMPLE sample; suruct typedef{ int x,y; }SAMPLE2; SAMPLE2 sample2; void AA(??? *s){ int a = s->x; int a = s->y; } void main(){ AA(&sample); AA(&sample2); } こんな処理をしたいのですが、???の所がわかりません。 良い方法を教えていただきたいです。 仮の構造体を1つ作って、その変数に代入→渡すってやり方だとできましたが 激しく面倒くさい。
|

|