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
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つ作って、その変数に代入→渡すってやり方だとできましたが 激しく面倒くさい。
813 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:52:41 ] 関数オーバーロード、もしくはテンプレート関数でぐぐれ。
814 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:54:43 ] >>812 typedef SAMPLE SAMPLE2;
815 名前:デフォルトの名無しさん [2008/02/26(火) 18:02:57 ] >>813 >>814 情報ありがとうございます。 テンプレート関数が一番やりたかった事を解決してくれそうでした。 ありがとうございました。
816 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:10:58 ] 構造体のメンバを決め打ちするようなテンプレート関数は感心しないな。 テンプレートを使うということはC++で良いので、それならメンバ関数にしてしまった方が良い。
817 名前:デフォルトの名無しさん [2008/02/26(火) 18:22:32 ] ifstream::readって実際に何バイト読めたか検出できないんですか? freadみたいにふつうに戻り値が来るのかと思いきや違うみたいですし…。
818 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:28:13 ] つ gcount
819 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:29:13 ] >>817 自己レス。failで少なくとも期待通りの バイト数読めたかどうかは取得できるのね。
820 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:30:30 ] >>818 と思ったらそんなメソッドがあったか。サンクス
821 名前:デフォルトの名無しさん [2008/02/26(火) 18:31:39 ] fstreamは重要なところでは使うべきではない APIのほうがよい
822 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:55:55 ] んなこたーない
823 名前:デフォルトの名無しさん [2008/02/26(火) 19:18:08 ] fstreamは一社の開発ではないがAPIはMS一社 どのコンパイラでも同じ動作になる あと3000個とか開けない
824 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:18:50 ] if文って 文字列と文字列を比べることって出来ないですよね? 1 = あいうえお 2 = かきくけこ 3 = さしすせそ 4 = あいうえお if (a = 1){ } みたいなことをやりたいのですがどうしたら良いでしょうか?
825 名前:デフォルトの名無しさん [2008/02/26(火) 19:19:44 ] stringはできる
826 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:20:33 ] > どのコンパイラでも同じ動作になる コンパイラで差はないかもしれないが・・・
827 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:21:41 ] >>823 んなばかな APIがMS一社で規定されてるなんて初めて知った MSはついに世界を征服したのか
828 名前:デフォルトの名無しさん [2008/02/26(火) 19:23:04 ] Windowsのファイル入出力APIのことを指す
829 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:55:08 ] >>824 strcmpしとけ
830 名前:デフォルトの名無しさん [2008/02/26(火) 21:19:23 ] CreateProcessしたときに止まらなくなったら停止させたいんですけど どうやったらいいですか?
831 名前:デフォルトの名無しさん [2008/02/26(火) 21:22:25 ] ググって解決しました
832 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:58:13 ] マルチスレッドで動かしてる関数って_endthread()書かなくてもreturn;書いてたら 問題ない?
833 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:04:41 ] 問題ない。 ところで_beginthreadは使うなよ。_beginthreadexにしろよ。 msdn2.microsoft.com/ja-jp/library/kdzttdcb (VS.80).aspx
834 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:15:49 ] VC6.0です。 __declspec(dllimport) int __stdcall hoge( LPWORD, LPWORD, LPWORD ); という形の関数のアドレスが入る関数ポインタhageを作りたいのですが、 うまく宣言できません。 __declspec(dllimport) int __stdcall (*hage)(LPWORD, LPWORD, LPWORD ); などとやるとコンパイルエラーになってしまいます。 どうすれば宣言できるのでしょうか?
835 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:26 ] declspecは関係ないだろ
836 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:19:03 ] 関係あるよ
837 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:19:32 ] 関数ポインタで悩んだら、typedef typedef __declspec(dllimport) int __stdcall hogetype( LPWORD, LPWORD, LPWORD ); hogetype hoge;
838 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:36:15 ] 関数ポインタの便利さになれすぎてしまって 最近 if を見るたびにすぐ関数テーブル化してしまう。 間違い?
839 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:39:07 ] なるべくシンプルにかくのを推奨されますからね
840 名前:デフォルトの名無しさん [2008/02/26(火) 22:43:09 ] 関数テーブル間違いです 鈍いです
841 名前:デフォルトの名無しさん [2008/02/26(火) 22:47:58 ] なんかCreateProcessすると不安定になる スレッドでsystemで実行してみる CreateProcessを短期間に20回以上使うと動かなくなるエラーってありますか? 実行する側のexeのせいかもしれないですが
842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:50:02 ] テーブルだめなのか・・ if の中にさらに if があるともうその地点でうわ・・って思ってしまう。 ちょっとソース見直してみます
843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:50:41 ] >>833 ありがとう。今度からそうする
844 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:54:19 ] そこでBoost::functionとコールバックですよ。
845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:59:28 ] >>842 無理して避けることもないよ。何事も程々が1番。
846 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:18 ] グローバル変数って絶対使わない方がいいんですかねえ 例えばゲームプログラムを作っていて、状態を管理するグローバル変数を使っているとする。 その変数には、ゲームの進行に合わせて、例えば 定数(TITLE=0, STAGE1, STAGE2, STAGE3, STAGE_CLEAR, GAME_OVER, ENDING)が入るとする。 処理は上の状態それぞれでモジュール化されているとすると、 どうしても状態管理変数はグローバル変数化してどの状態からでも 参照・設定できるようにせざるを得ないと思うのですが、何かいい手があるのでしょうか。 状態管理変数をファイル内static変数にしてセッターを使って書き換えるようにしたり、 状態管理変数とセッターをクラスにしてそのオブジェクトのスコープをグローバルにするもしくは状態管理変数とセッターを staticにしてどのクラスからでも書き換えられるようにするくらいなら最初から状態管理変数をグローバルにしといた方が シンプルだと思うのですがどうでしょうか。
847 名前:デフォルトの名無しさん [2008/02/26(火) 23:03:57 ] 数が多くなければOK、重要ならOK
848 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:05:38 ] >>846 静的なシングルトンもグローバル変数も似たようなもんだ グローバル変数でいいんじゃね? ただ、関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから ずいぶんと楽になる*かもしれない*
849 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:30:59 ] >>846 シングルタスクなら良いけど。 GUIでスレッド使って随時処理しながら入力待ちして、 入力はコールバックで処理、みたいのだと、 ゲッタやセッタ作った方が排他処理し易いかなぁ。 まぁケースバイケース?
850 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:32:07 ] ゲーム状態のインスタンスが1つだけなら、グローバル変数でいいと思う。 インスタンスが複数なら、 状態ごとの処理に、状態管理変数をクラス化したものを渡すとか、 もしくはstateパターンなんてのもいいかもしれない。
851 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:33:35 ] どうせグローバル変数的に使うとはいえ、 それゆえにどこから変更されてるかを追跡するためにも >関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから というのは地味に大事
852 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:38:31 ] ゲーム状態も例えば、プレイヤキャラの他にAIキャラが裏で進行中なんてことになると、 グローバルだと破綻するよね。そんな場合はゲーム状態はキャラクタに依存する情報になるわけだけど。
853 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:46:14 ] シングルトンとグローバル変数は違う。 グローバル変数として使ってる間違ってる例が多いのが勘違いの原因かもしれない。 自分だったら>>846 の場合、シーンマネージャクラスを作ってそいつに振る舞いを管理させる。 極力グローバル変数は使わない。
854 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:01:10 ] シングルトンは初期化のタイミングを選べるからグローバルとは大きく違う。
855 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:20:00 ] 結局オブジェクト指向の導入でCにおけるグローバル変数使用の問題は解決できてないんじゃねえの Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの結局クラスとか オブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね
856 名前:デフォルトの名無しさん [2008/02/27(水) 00:21:36 ] system は空白が改行のように扱われてしまいます パラメータは渡せませんか?
857 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:22:49 ] >>855 んなこたーない
858 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:26:23 ] ファイルの読み込みについての質問です。 ---- 2008/02/20,01:00:00 2008/02/21,02:00:00 2008/02/26,03:00:00 … ---- と書かれたファイルを、 tmp[0] = 2008; tmp[1] = 2; tmp[2] = 20; tmp[3] = 01; といったように取り込みたいです。 スラッシュとカンマとコロンを区切りにしてうまく取り込む方法を教えてください。 もし、スラッシュしかなければstrtokとatoiでできたのですが、3種類あるので困っています。 よろしくお願いします。
859 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:28:04 ] >>856 どんな文字列を渡したとき?
860 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:28:08 ] 見た感じフォーマットは固まってるだろうから 単純に先頭からパースするだけじゃね
861 名前:デフォルトの名無しさん [2008/02/27(水) 00:29:09 ] string s; s.substr(0,4); s.substr(5,2); s.substr(7,2); とかでいいのでは?
862 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:31:49 ] >>858 fscanf(fp, "%d/%d/%d,%d:*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);
863 名前:デフォルトの名無しさん [2008/02/27(水) 00:31:50 ] >>859 自己解決しました 同名のexeがありそれが動いていたようです
864 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:34:11 ] 862の訂正 *の前に% fscanf(fp, "%d/%d/%d,%d:%*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);
865 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:34:23 ] >>855 >Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの これは当たり前なんだが、(といってもオブジェクト指向を使わないって意味じゃない、 Cでもオブジェクト指向は昔から存在する) >結局クラスとかオブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね 何が複雑なんだ? デザインパターンなんか当たり前の設計パターンに名前付けただけじゃないか。
866 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:36:27 ] 変数へのアクセスを制限することで単純になるんだけどなぁ。 無制限に変数にアクセスできたほうが複雑だって、わかんないかなぁ。
867 名前:デフォルトの名無しさん [2008/02/27(水) 00:48:26 ] Perlの文法が糞なのは間違いない。
868 名前:858 mailto:sage [2008/02/27(水) 01:12:38 ] >861 レスありがとうございます。 が、、私ではうまいこと使えませんでした。ごめんなさい。。 >860, 864 fscanfでできました。 どうもありがとうございました。
869 名前:デフォルトの名無しさん [2008/02/27(水) 01:23:50 ] C++で配列のコピーってどうやりますか? for()文で代入を回す?
870 名前:デフォルトの名無しさん [2008/02/27(水) 01:24:40 ] memcpyが最速では
871 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:26:15 ] >866 何を以て「単純」とするかに依るんだろうな。 多分 >855 は言語の構造として単純であること、習得の容易さなどを見て言っているんだろうが 大きなコードを、そのまま扱うと中身はかなり複雑化する。 クラスや名前空間などを使って、大きなコードを小さな部品の集合体として考えて それぞれの部品単位で扱うことで、ひとつひとつの部分は単純になる。
872 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:26:28 ] >>869 std::copy()
873 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:27:43 ] >>870 C++ で memcpy() は使わない。禿との約束だよ。
874 名前:デフォルトの名無しさん [2008/02/27(水) 01:30:02 ] 推奨されていなくても確保の仕方から vectorでもstringで有効でしょう memcpy
875 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:31:12 ] memcpyより自分でアセンブラ書いた方がはやかったんだけど、そんなもん?
876 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:31:59 ] >>875 それはめずらしい。
877 名前:デフォルトの名無しさん [2008/02/27(水) 01:39:54 ] memcpyより早いコードくれ
878 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:40:26 ] SSE使ったんだけどね
879 名前:デフォルトの名無しさん [2008/02/27(水) 02:17:49 ] マイクロソフトのCHMファイルはなかなかいいんだけど SJISしかコンパイルできなくて、サイズが20Mとかになるとコンパイルに失敗する CHMをパクってWindowsの標準ヘルプ形式を作りたい 参加者募集中 圧縮接尾辞配列がいいと思う ブロックーソーティングしたデータはそのまま全文検索できるとおもうがどうか?
880 名前:デフォルトの名無しさん [2008/02/27(水) 02:27:20 ] 複数のテキスト文書を圧縮できてかつ高速に全文検索できて CHMのような普及率を目指したい デスクトップサーチとは目的が違う 元のファイルが復元できてまとめられる点が大事
881 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:28:28 ] tarでいいじゃない
882 名前:デフォルトの名無しさん [2008/02/27(水) 02:33:30 ] tarは全文検索できるように設計されてるの?
883 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:38:51 ] tarは圧縮しないからね。
884 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:40:51 ] >>875 アラインメントに縛りを入れれば早くはできると思う
885 名前:デフォルトの名無しさん [2008/02/27(水) 02:46:44 ] 半分にはならないとだめだな chmは全文検索できて元の半分になるよ
886 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:51:09 ] >>880 専ブラのログをまとめるのに便利そうだ あてにせず期待してるよ
887 名前:デフォルトの名無しさん [2008/02/27(水) 03:29:32 ] badc$の巡回データは adc$b dc$ba c$bad $badc ソートすると $badc adc$b badc$ c$bad dc$ba ブロックソートではcb$daというデータのみが与えられる 復元しようとするとここまでは直ぐわかる $***c a***b b***$ c***d d***a c$、ba、、$b、dc、adと繋がっていることがわかる たとえばdcというデータは何番目に出現するか求めるとすると末尾のcから調べていけば良さそうだが
888 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 03:41:52 ] std::string のような STL クラスを前方宣言するにはどうしたらいいですか? それともこういうクラスって前方宣言しないでヘッダーに直接 include させても問題ないですか?
889 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:17:01 ] Visual C++ Express Edition を入手したので、簡単なプログラムを作ってみようと思ったのですが、 なぜかコンパイルできません。 コマンドラインで、 cl c:\source.cpp としても、 'cout' : 定義されていない識別子です。 'endl' : 定義されていない識別子です。 等とエラーが返ってきます。 ちなみに、ソースは以下のようなものです。 #include <iostream> int main(void) { cout << "Hellow, World!" << endl; return 0; } なぜエラーになるのか分かりません。お暇な方いましたら、どうかお知恵をお貸しください。
890 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:20:39 ] ×cout << "Hellow, World!" << endl; ○std::cout << "Hello World!" << std::endl;
891 名前:デフォルトの名無しさん [2008/02/27(水) 04:21:19 ] あんたが外国にいるんじゃなかったら、本を買って勉強しる。 とりあえず、 std::cout << "Hellow, World!" << std::endl; としてやってみ。 もしくは、 using namespace std: をinclude 文の下に書いておくとか。 まあがんばれ。
892 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:24:33 ] >>890 ありがとうございます。 using namespace std; を追加したらコンパイルできました・・・ ^ ^; 最初、#include <iostream.h> としていて、コンパイル時にそんなファイルは無いと言われ、 #include <iostream> に直したら今度は cout が定義されて無いと言われ・・・ 完全に勉強不足ですね・・・・
893 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:48:08 ] >892 環境によっては #include <iostream.h> と書くと、using namespace std; を勝手にやってくれるんだわ。 多分、そういう環境を前提にしたコードだったんだろう。
894 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 08:20:07 ] ついでに勉強不足の俺に教えてください #include <string.h> #include <stdio.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string a = "0908a89"; printf("%s\n", a); getchar(); return 0; } aに0908a89が代入されて無いみたいなのですが、何処がまずいのでしょうか?
895 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 08:37:47 ] いろいろまずい。 というか、それVCならコンパイルとおるの?gcc 2.96だと少なくとも通らない。 ・string.hってCの奴じゃないかな。#include <string>と書くべし ・その場合aってのはstring型なので、printfに%sで受けるのはよろしくない。 書くならprintf("%s\n",a.c_str()); ・でも、せっかく#include <iostream>してるんだから cout << a << endl;でいいじゃん。 ・ところで最後のgetcharは何のために? 以上直すと、こっちでは代入されるよ。
896 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:02:30 ] >>895 ありがとー 出来ました。 コンパイルは出来てましたがNULLが表示されました。 getchar();しないと画面が速攻閉じてしまうので、画面確認用にです。
897 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:06:36 ] >>896 修正したソースを張ってみないと有効な回答は得られないと思うよ。
898 名前:デフォルトの名無しさん [2008/02/27(水) 09:09:57 ] int* random_array(int n); shared_ptr<int> p(random_array(100)); というように書けないのですが、shared_ptrの作成時って、必ずnew[100]とかって やらないとだめなのですか?
899 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:30:04 ] >>898 arrayの共有にはshared_arrayな。 それとエラーメッセージ書かないとエスパーしか解答できない。
900 名前:デフォルトの名無しさん [2008/02/27(水) 11:36:18 ] system("path %PATH%; C:\\hofe;"); が有効になりません・・・ なぜでしょう
901 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:59:17 ] >>900 環境変数はプロセスごとに別々だから 子プロセスを起動してPATHを設定させても自プロセスには影響しない
902 名前:デフォルトの名無しさん [2008/02/27(水) 12:07:43 ] 改行しても無理でした パスを直うちするか、そこへ移動するしかないですか? APIでPath設定できるか調べてみます system("path C:\\hofe; \n abc.exe");
903 名前:デフォルトの名無しさん [2008/02/27(水) 12:20:15 ] pathを追加する方法教えてください わかりませんでした
904 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:10 ] SetEnvironmentVariable
905 名前:デフォルトの名無しさん [2008/02/27(水) 12:30:25 ] サンクス 長い実行パスと、長いパラメータパスで困ってました これで解決しそうです
906 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:29:07 ] #include "stdafx.h" #include <string> #include <stdio.h> #include <iostream> using namespace std; 略) string x; sprintf(x, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]); これで、buf[0], buf[1], buf[2], buf[3], buf[4]の値をstring型 でx代入したいんですけど xが定義されていないと怒られてしまいます。どうしたら良いのでしょうか?
907 名前:デフォルトの名無しさん [2008/02/27(水) 13:39:20 ] string x(11,'\0'); sprintf(&x[0], "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]); これは無理?
908 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:51:44 ] >>907 テラThanks
909 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:57:03 ] まず間違いなく大丈夫ではあるものの一応標準外の仕様だと心にとどめておくといい
910 名前:デフォルトの名無しさん [2008/02/27(水) 14:02:11 ] winsockを使うときエコーバックするのは普通ですか? それとも負荷を下げるためにしませんか? 少量ずつデータ受け取ればミスしにくくなると思うんですけど 少しずつ受け取って確認無しでいいですか
911 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:02:13 ] 次の改訂で標準になるけど、コンパイラの対応が普及するまで合わせると、 問題ないと言えるのは何年も先かなぁ。
912 名前:デフォルトの名無しさん [2008/02/27(水) 14:09:00 ] http先のファイルのサイズやcrcを取得する方法教えてください それみてデータが正常が判定したいです
913 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:23:32 ] >>910 何をどこにエコーバックするんだ ミスって何のだ >>912 ファイルサイズは全部受信すればわかるだろう CRCの計算方法はこれ↓ en.wikipedia.org/wiki/Computation_of_CRC
914 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:40:20 ] >>912 サイズはレスポンスヘッダのContent-Length (ない場合もある) CRC は無理かと
915 名前:907 mailto:sage [2008/02/27(水) 14:46:39 ] もう一つ教えて下さい。 char str[100]; sprintf(str, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]); char str0[100]; char str1[] = "01061719d0"; char str2[] = "0106171f34"; if (strcmp(str, str1) == 0){ printf("この番号は登録されています@\n番号%s\n",str); } else if (strcmp(str, str2) == 0){ printf("この番号は登録されていますA\n番号%s\n",str); } else { printf("この番号は登録されていません\n番号%s\n",str); } このようなif文にしたいのですが、登録したbuf[]を読み込んでも"この番号は登録されていません" と表示されてしまいます。なぜでしょうか?
916 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:53:34 ] std::vectorとCStringでは、empty() (とEmpty()) の意味違うのね〜 しばらく騙されてました。
917 名前:デフォルトの名無しさん [2008/02/27(水) 14:54:36 ] stlのset使った方がいいんじゃない
918 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:03:58 ] >>915 strを表示させてみるんだ
919 名前:デフォルトの名無しさん [2008/02/27(水) 15:06:37 ] >>914 GETでして送られてくるヘッダをみるんですよね? 2chのスレURLいれるとサイズ書いてないです できる限りなんとか取得する方法無いですか?
920 名前:デフォルトの名無しさん [2008/02/27(水) 15:08:28 ] 送受信のデータです GET live27.2ch.net/test/read.cgi/livemarket2/1202634378/ HTTP/1.0 HTTP/1.1 200 OK Date: Wed, 27 Feb 2008 06:07:25 GMT Server: Apache/2.0.59 (Unix) PHP/4.4.2 mod_ssl/2.0.59 OpenSSL/0.9.7e-p1 Vary: Accept-Encoding Connection: close Content-Type: text/html
921 名前:デフォルトの名無しさん [2008/02/27(水) 15:12:53 ] 動的に変化するから無理そうですね 通信切れで見られないHMLの取得を避けたいんですけどいい方法ありませんか
922 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:27 ] 最後に </html> が無かったら途中で切れたと判断するとか
923 名前:デフォルトの名無しさん [2008/02/27(水) 15:20:51 ] 普通のテキストならどうしたらいいですか? もともと不完全なHTMLならどうしたらいいですか? サーバーのファイルと一致していてもエラーになります
924 名前:915 mailto:sage [2008/02/27(水) 15:23:30 ] >>918 str は 0106719d0 になっているようです>< なんでうまくいかないんだろう。。
925 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:25:54 ] >>922 HTML4では </html> は省略可能なので万能じゃない >>920 Connection: close って書いてあるから接続断まで読めばそれで全部。 あと、なるべくHTTP/1.1使え 手元で確認した限り、HTTP/1.1でアクセスすると chunked で送ってくるので末尾がちゃんと確認できる
926 名前:920 [2008/02/27(水) 15:28:36 ] サンクス
927 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:34:26 ] >>924 sprinf で \n を付けているのに str1, str2 には付いていないぞ
928 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:35:55 ] HTMLパーサは↓程度はきちんと解析してくれないとねぇ‥‥ 46 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/27(日) 00:38:23 これだって正しいでっせ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "www.w3.org/TR/html4/strict.dtd "> <title>テスト</> <p><em/ほげほげ/ <p style=width:50px<strong>ふーばー</strong</p>
929 名前:デフォルトの名無しさん [2008/02/27(水) 15:42:57 ] 1.0から1.1にするとバットリクエストのエラーになります 書式が違うんでしょうか_ buf="GET " + path + " HTTP/1.1\r\n\r\n"; n=send(sock, buf.c_str(), buf.size(), 0);
930 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:44:16 ] 1.1はHostヘッダの送信が必須
931 名前:デフォルトの名無しさん [2008/02/27(水) 15:44:52 ] 1.1だと、ユーザー情報も送信しないと無理になるんですか
932 名前:デフォルトの名無しさん [2008/02/27(水) 15:54:08 ] なおらないです どうすればいいですか? GET /test/read.cgi/livemarket2/1202634378/ HTTP/1.1 Accept: */* Referer: live27.2ch.net/ Accept-Language: ja Host: live27.2ch.net Connection: Keep-Alive HTTP/1.1 400 Bad Request ソース buf="GET " + ko+ " HTTP/1.1\r\n\r\n"; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0); buf="Accept: */*\r\n\r\n"; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0); buf="Referer: http://"+sev+"/"+"\r\n\r\n";; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0); buf="Accept-Language: ja\r\n\r\n"; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0); buf="Host: "+sev+"\r\n\r\n"; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0); buf="Connection: Keep-Alive\r\n\r\n"; cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
933 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:58:54 ] 改行大杉
934 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:01:24 ] 2回改行するのは最後だけ
935 名前:915 mailto:sage [2008/02/27(水) 16:02:42 ] >>927 盲点でした。 やっと次の作業に進めそうです。本当にありがとうございます。
936 名前:デフォルトの名無しさん [2008/02/27(水) 16:06:31 ] サンクス 改行削って上手くいきました あと受け取るバッファを多くすると返却値を間違えるようなんです どうやれば直りますか? n = recv(sock, &buf[0], 128000, 0); としてnまで表示するとデータ入ってないときがあります
937 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:05:30 ] めっちゃミジンコの質問させて下さい。 図書館で借りてきた本のページが抜けてて%cはどういう時に使うのか わかりません; %はぐぐれないみたいで困ってます。
938 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:08:24 ] >>937 www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html 文字じゃね?
939 名前:937 mailto:sage [2008/02/27(水) 17:16:21 ] >>938 まだ始めたばかりなのでこのサイトはちょっと厳しいです・・・。 文字ということで本を読みすすめてみます。 有難うございました。
940 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:49:40 ] >>932 ,936 send も recv も、指定したサイズ未満しか送受信できないことがあるので、 その場合にも対応すること。 あと、エラー処理もちゃんと毎回やること。
941 名前:デフォルトの名無しさん [2008/02/27(水) 20:53:29 ] HTTPで初めにサイズだけ取得したとして、読む位置をデータの始まりにシークできますか? 初期化からやり直した方がいいですか? データ位置を自前で判別して方がネットワークの負荷は少なくなりますが
942 名前:デフォルトの名無しさん [2008/02/27(水) 20:55:33 ] 自己解決しました いったん全部読み込んで、ヘッダとデータを分離してサイズが不一致なら再送にします
943 名前:デフォルトの名無しさん [2008/02/27(水) 20:56:50 ] すいません。タイトルにふさわしく初歩的な質問ですが、 ポインタはメモリを格納しているアドレスの位置を指す と言いますが、ではそのポインタの情報はどこに格納 されるのでしょうか?
944 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:01:14 ] 実行時なら、それを格納しているのがポインタ変数。 コンパイル時、&xという記述からどうやってxのアドレスを知るかと言うことなら、 それはコンパイラの仕事、コンパイラが決めること。
945 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:08:38 ] つまりint とか char とかと同じような感じでアドレスが入ってる変数があるってだけさ
946 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:09:38 ] ごめん語弊がありますねすいません (入ってるのアドレスだけじゃないですね)
947 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:11:45 ] 普通はアドレスだけだと思うが。 メンバポインタとかは別だが。
948 名前:デフォルトの名無しさん [2008/02/27(水) 21:12:50 ] string x, y="*****"; となっていたとして、 xとyのデータを一致するようにできますか コピーではなくて
949 名前:デフォルトの名無しさん [2008/02/27(水) 21:14:24 ] int a,b=10; &a=&b;のような事はできないですよね?
950 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:14:35 ] string x = "*****", y = x; という話ではなくて?
951 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:16:08 ] string だと共用体が使えないから 参照にするしかないな。 string y = "*****", &x = y;
952 名前:デフォルトの名無しさん [2008/02/27(水) 21:16:48 ] 同一アドレスの同一データにしたいのですが 無理ですよね
953 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:18:11 ] x も xもポインタにして確保した同じとこさせばいいんじゃね?
954 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:19:46 ] >>949 アドレス演算子の結果は右辺値だと思った。
955 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:21:38 ] >>949 int *ap = &a; int *bp = &b; ap = bp;
956 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:25:39 ] >>952 何でそう言う事がしたいの?
957 名前:デフォルトの名無しさん [2008/02/27(水) 21:36:28 ] すでに確保された変数のアドレスを書き換えるテクがあるかなと思った
958 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:38:06 ] アドレスはマシン語にそのまま組み込まれてるんだぜ?
959 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:40:37 ] 変数は極端な話レジスタに載ってるかも知れないわけで。 string x,y="..."; #define x y
960 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:43:17 ] string y = "*****", &x = y; とした場合、最適化で x と y が同一視される可能性はあるんじゃないかな。
961 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:47:24 ] >>957 変数のアドレスは、変数が確保されたときに固定されるものだろ。 「すでに確保された変数のアドレスを書き換えるテク」を期待する目的がわからん。
962 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:50:29 ] 論理アドレスくらいなら書き換えることは可能かもしれない。
963 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:22:39 ] class CSample2{}; class CSample { public: void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2 private: CSample2 m_obj_s2; }; main{ CSample1 obj_s1; CSample2 *obj_s2 =NULL; obj_s1.get( obj_s2 ); } これでmain内のobj_s2がobj_s1.m_obj_s2と同じ物を指すようにしたかったのですが、NULLを指したままかわりません。 参照戻しではできたのですが、これで出来ない理由がわからず気持ち悪いです。 どなたか原因のご教授お願いします。
964 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:23:37 ] vectorに関数ポインタを格納するにはどうしたらいいでしょうか? vector<bool (*func)(int)> EroeroFunction; ↑<>の中のカッコが悪戯してうまくコンパイルが通らなくて困ってます。 構造体に関数ポインタを入れればなんとかなるんですが、メンバが1つしかないのでなんとも。
965 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:27:29 ] かなりのFAQ。引数経由でポインタを戻すなら、ポインタのポインタかポインタ参照か どっちかつかえ。 < void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2 > void get( CSample2 *&obj_s2 ){obj_s2 = &m_obj_s2;} > void get( CSample2 **obj_s2 ){*obj_s2 = &m_obj_s2; }
966 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:27:58 ] >>963 get関数内でobj_s2を書き換えても、呼び出し側のobj_s2は書き換わらない。 関数に引数を渡す際の基本だろ? ポインタを書き換えたいなら、ポインタをアドレス渡しでもすればいい。 void get( CSample2** ppobj_s2 ) { *ppobj_s2 = &m_obj_s2; } obj_s1.get( &obj_s2 );
967 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:29:45 ] >>964 vector<bool (*)(int)> じゃないの?
968 名前:デフォルトの名無しさん [2008/02/27(水) 22:33:46 ] vector<char>って後方に同じ型を連結できますか そういう関数ありますか
969 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:34:45 ] >>968 言ってる意味が分からない。
970 名前:デフォルトの名無しさん [2008/02/27(水) 22:35:22 ] push_backでは一つしか増やせません 一度に増やすやつないですか
971 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:36:14 ] >>968 std::copyとstd::back_inserterを組み合わせるんじゃねーの?
972 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:36:42 ] >>968 こういうこと? vector<char> v1, v2; v1.insert(v1.end(), v2.begin(), v2.end()); // v1の末尾にv2の全要素を追加
973 名前:デフォルトの名無しさん [2008/02/27(水) 22:37:22 ] vector<int> x,y; x={1,2,3} y={4,5,6} x.push_back(y)={1,2,3,4,5,6} こういうやつです
974 名前:デフォルトの名無しさん [2008/02/27(水) 22:39:20 ] それでできますかサンクス
975 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:41:49 ] まんまinsertでいいんじゃね?
976 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:42:56 ] insertやね operator+=を外部に定義しておくと便利かも
977 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:47:04 ] 要素の連結か、要素ごとの+=か曖昧なので、そんなのいらんかも
978 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:07:18 ] C言語なんですが 配列でポインタ表現を使ってアクセスしてインクリメントようと思って *(array+i)++としたら'++'には左辺値が必要です、とエラーが出てきました これは配列で宣言したからだと思うんですが ポインタで宣言した場合は値が飛び飛びになるので、*(array+i)みたいな表現できないでしょうし どうすればいいでしょう?
979 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:09:43 ] (*(array+i))++; ++*(array+i); 変なことになったらとりあえず優先順位を疑うのは基本。
980 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:10:19 ] *((array++)+i) // arrayを増やす場合 *(array+i++) // iを増やす場合
981 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:11:35 ] *(array+i) と array[i] は優先順位以外は等価。
982 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:12:23 ] >>979 できました。ありがとうございます。 優先順位って今まで全然気にしてませんでしたので 今後注意して行こうと思いますorz
983 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:14:10 ] >>979 と >>980 のどちらを意図してるんだろうか。 それはともかく、array[i]++; と書けばいいのに 何でそうしないのか本気で理解できない。
984 名前:デフォルトの名無しさん [2008/02/27(水) 23:27:31 ] i++[array]と書くのが漢
985 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:30:03 ] 漢すぎるwwwwww
986 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:39:05 ] (*(array + i))++; ←等価→ array[i]++; ←等価→ i[array]++; array++[i]; ←等価→ *((array++)+i) ←等価→ i[array++]; i++[array]; ←等価→ array[i++]; ←等価→ *(array+i++);
987 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:40:43 ] はじめて見た。 誰だよこんな書き方見つけた奴……
988 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:43:59 ] *(E1+E2) と E1[E2] の挙動は等価だと規格に書いとるべ。 *(array+i) と *(i+array) が等価なのと同じく array[i] と i[array] も等価だべ。
989 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:44:30 ] array[i]を*(array+i)の糖衣構文とすることを発案した人が真っ先に見つけただろうな。 で、誰?
990 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:45:42 ] (i % 16)["0123456789ABCDEF"]
991 名前:デフォルトの名無しさん [2008/02/27(水) 23:45:54 ] string x,y; N=0; x.resize(0); に対して x+=y; と memcpy(&x[N],&y[0], y.size()); N+=y.size; は同じのはず yがバイナリデータだと上が失敗することが多いです
992 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:47:15 ] >>990 すげぇwwww感動したwwwwwww
993 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:49:12 ] >>991 x のメモリ確保はどこ行った。
994 名前:デフォルトの名無しさん [2008/02/27(水) 23:50:05 ] メモリ確保はあらかじめしておいてください あと最後にNでresizeも
995 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:50:49 ] >>991 stringに文字列以外入れるなよ。 あと、x.capacity() >= y.size() でないとmemcpyがメモリ壊すぞ。
996 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:51:46 ] >>994 同じというなら、同じになるコードを書けよ。
997 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:53:00 ] 変な入門書で配列のとこにすぐにその記法が説明してあったからできるのは知ってたけど、 できる理由は全然考えたことがなくて、今はじめて理解したw
998 名前:デフォルトの名無しさん [2008/02/27(水) 23:53:19 ] zipファイルを少しずつyに入れてからxに足し込むんですけど memcpyの方は書き出して復元できますが、+=はまれに正常でほとんど壊れます 原因はなんでしょう
999 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:55:24 ] >>998 vectorを使わずstringを使ったから。
1000 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:55:32 ] なんで文字列じゃないものをstringに入れるんだ。
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。