- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
- プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・ぐぐる ・マニュアルで探す ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(なるべくそのままで) ・実行環境(OS名、コンパイラ名) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって小心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
- 159 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:59:55 ]
- >>137,157
回している回数じゃないかな Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001 待っていればいつか終わると思うよ
- 160 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:05:22 ]
- >>157
{}の位置が悪い 自分より小さい数で割るたんびにcountを0に戻してる 自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと
- 161 名前:156 mailto:sage [2008/09/16(火) 00:21:21 ]
- >>158
なるほど、そういうことか。 確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。 あれは暗黙で定義されているからってことか。一つ賢くなりました。 ありがとうございます。
- 162 名前:137 [2008/09/16(火) 01:03:17 ]
- >>159
ありがとうございます。 デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。 >>160 基本的なアルゴリズムが間違っていたのですね、、 ありがとうございます!
- 163 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:09:12 ]
- 引数にリファレンスを渡すとオーバーヘッドが小さくなるんですか?
- 164 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:42:16 ]
- 値のサイズがリファレンス(=ポインタ)のサイズに比べてかなり大きければなる
- 165 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:05:01 ]
- 今勉強のために文字列クラスを自作しています。
それでoperator+=で文字列の代入結合まではなんとかできたのですが、 operator+の定義がうまくできません。 CString a, b, c; a = "abc"; b = "def"; c = a + b; //"abcdef"にならない デバッガで確認したところ、 CString CString::operator+(CString& str) { CString temp(*this); temp += str; //ここまではうまくいっている。 return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。 } 一応デストラクタはこんな感じです。 CString::~CString() { if(ptr) delete[] ptr; } tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。 どうすればうまくいくのかどなたか教えて下さい。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:14:22 ]
- >>165
コピーコンストラクタとoperator=作ってる?
- 167 名前:デフォルトの名無しさん [2008/10/04(土) 23:16:07 ]
- いろいろと辺
- 168 名前:165 mailto:sage [2008/10/05(日) 08:09:11 ]
- >>166
operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。 (operator= を定義しておけば必要ないと思っていたもので・・・) コピーコンストラクタを作ったところ、うまく動作するようになりました。 どうもありがとうございました。
- 169 名前:デフォルトの名無しさん [2008/10/05(日) 08:46:10 ]
- CString::operator+で、足し算定義しているのに、なんでその関数内部で
足し算が出来るんだよ? コンパイル通るのかよ
- 170 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:41:38 ]
- + と += は別物だよ
- 171 名前:デフォルトの名無しさん [2008/10/05(日) 11:27:46 ]
- べつなのはわかっている ここはなぜいいんだよ
temp += str; //ここまではうまくいっている。
- 172 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:38:20 ]
- // 実は勘違い
- 173 名前:デフォルトの名無しさん [2008/10/05(日) 11:40:14 ]
- すまん間違えた
- 174 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:08:04 ]
- 単純な事質問するんだけど
型の宣言って複数の関数をまたいでするって出来ないのかな? うまく説明出来ないんで悪いんだけど 例えば read.cpp global.h test.cpp の3つがあった場合。 read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。 次にglobal.h内でread.cppで作った関数をextern void 何々();とする。 そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。 記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る ・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。
- 175 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:11:48 ]
- >>174
「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。 どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。
- 176 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:19:44 ]
- 余計な所省いて晒してみる、まだ日が浅くて酷いコードでごめん。
ReadingFile.cpp int enemy_img; void readingfile(){ enemy_img = LoadGraph("date/img/enemy.bmp"); } GlobalM.h extern void readingfile(); //全ての素材 enemy_move.cpp void enemy_move_02(){ move02.enx+=sin(PI*move02.eny/80)*5; move02.eny+=1.5f; DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ; ↑ここでReadingFile内の関数で指定したのを読み込ませたい。 DeleteGraph( enemy_img ) ; }
- 177 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:28:55 ]
- >>176
extern int enemy_img;
- 178 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:35:16 ]
- >>177
ありがとおおお でもどうしてintも読み込ませないといけないんだ? 既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。
- 179 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:47:41 ]
- コンパイラは、各ソースファイルを別々にコンパイルしている
他のソースに何か書いてあっても、 今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない
- 180 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 15:15:44 ]
- >>177は「int型のenemy_imgという変数がどこかにあるはず」という情報。
コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。 そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。 (見つからなかった場合はリンクエラーになる)
- 181 名前:デフォルトの名無しさん [2008/10/16(木) 01:38:42 ]
- >>155ではありませんが、今私、全く同じ状況で困っています。
どなたかお答えいただけませんか?
- 182 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:10:05 ]
- >>181
ttp://www.microsoft.com/japan/msdn/vstudio/Express/ これじゃだめなの?
- 183 名前:デフォルトの名無しさん [2008/10/16(木) 03:47:20 ]
- 問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている)
先週C++を始めたばかりなので色々と書き方が解りません;; 考え方は解るのですが…… 二乗や平方根などなど……
- 184 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 04:27:08 ]
- >>183
// // 2つの円の重なりをチェックする。 // // 引数 // x1, y1, r1 円1の中心x座標、中心y座標、半径 // x2, y2, r2 円2の中心x座標、中心y座標、半径 // // 戻り値 // 0: 接する 正: 離れている 負: 重なる // int circle_check(int x1, int y1, int r1, int x2, int y2, int r2) { return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2); }
- 185 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:36 ]
- srand(0)とsrand(1)が同じ系列を生成するので、ソースコードを見てみたいのですが、
srandのソースコードってどこにありますか?
- 186 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 16:02:43 ]
- お使いのコンパイラによって実装は異なる
- 187 名前:181 [2008/10/16(木) 19:24:11 ]
- >>182
参考書を買って勉強しようと思っているのですが、その参考書で 『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』 なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。 とりあえずこれでやってみます!回答ありがとうございました。
- 188 名前:デフォルトの名無しさん [2008/10/16(木) 20:24:04 ]
- C++の質問です。2つお願いします
・CString 形式のデータで""hogehoge""というデータが入っていた場合、 前後のダブルクォーテーションを簡単に除去する方法はありませんか? ・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、 何か良い方法はありませんか?
- 189 名前:デフォルトの名無しさん [2008/10/16(木) 21:18:55 ]
- >>188
メモリマップドファイルとstd::stringならsubstr
- 190 名前:デフォルトの名無しさん [2008/10/16(木) 21:36:55 ]
- VC++2008proにて
特定のコード上で右クリックすると確実にフリーズするんですが 似たようなケースさらには対処法あったら教えてください。。 ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。 原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか? と思って全部コメントアウトしてみたけど無意味でした。。 他の情報としては、 普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。 一応左クリックおよびファイルの編集はできます。 右クリックだけ永久砂時計が発動します。 他も何か手がかりになりそうな所あれば探したいんで アレがひっかかってるんじゃね? とか言っていただけると助かります。
- 191 名前:190 mailto:sage [2008/10/16(木) 22:42:32 ]
- すまんスレチだったか。過疎なのか?
ちょっと他のところで聞いてみます。
- 192 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:44:03 ]
- インストールしなおしかな?
- 193 名前:デフォルトの名無しさん [2008/10/16(木) 22:51:43 ]
- >>192
と思ったらこんなタイミングで……なるほど。 しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……? MSに報告したほうがいいんでしょうかね。
- 194 名前:190 mailto:sage [2008/10/16(木) 23:35:13 ]
- 他スレにて解決しました。お騒がせしました。
別件ですがついでにこちらで質問してみたいことが。 bool b1,b2,b3,b4;があって、 if(b1 && b2 && b3 && b4) { 〜〜 } のようにやることは if(b1){ if(b2){ if(b3){ if(b4){ 〜〜 } } } } のようにやる事と同じように働いてくれるんでしょうか? それとも前者はb1〜b4をすべて求めてから論理積を計算し、 後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか? 前々から疑問に思っていました。
- 195 名前:デフォルトの名無しさん [2008/10/16(木) 23:42:58 ]
- 前は、if-ifの方が速いと思ってたけど、実測すると論理積の方が速い
分岐予測より、論理積のコストは少ない
- 196 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:46:47 ]
- >>194
短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。 だから上と下のどっちの書き方でも同じ意味になる。 もちろん、実際にコンパイラがどういうコードを吐くかは別として。
- 197 名前:190 mailto:sage [2008/10/16(木) 23:51:54 ]
- >>195-196
本当ですか、安心しました。 短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw 実測とかしたことない……やっぱそういう経験も役に立つんですね。 ありがとうございましたm(__)m
- 198 名前:デフォルトの名無しさん [2008/10/17(金) 00:54:32 ]
- >>189
亀レスだけどサンクス、調べてみるよ。
- 199 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:49:46 ]
- >>198
str.trim('\"')でできそう!
- 200 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 09:01:45 ]
- >>185
メルセンヌツイスターのソースを使えば良いジャマイカ
- 201 名前:デフォルトの名無しさん [2008/10/17(金) 14:06:39 ]
- 簡単にコピペできるのはXORシフト ライセンスとかあんまりなさそうだし
商用に組み込んだとしても問題にならないのでは
- 202 名前:デフォルトの名無しさん [2008/11/04(火) 18:46:54 ]
- 文字列を入力して、それを配列に1文字ずつ入れていきたいのですが、どのようにすればよいですか。
具体的にソースを挙げて教えてください。 よろしくお願いします。
- 203 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 18:58:54 ]
- >>202
char buf[適当な長さ]; fgets(buf, sizeof(buf), stdin);
- 204 名前:デフォルトの名無しさん [2008/11/04(火) 19:18:29 ]
- >>203
返信ありがとうございます。
- 205 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:47:28 ]
- typedef unsigned char bBuffer[128];
typedef DWORD wBuffer[32]; bBuffer A; wBuffer B; AからBにキャストするにはどうすればよいのでしょうか? でるぴだと B:= wBuffer(A); なんですけど
- 206 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:24:37 ]
- キャストに配列を指定してはいけない。つまり、foo = (Foo [])bar;こういうのはできないのよ。
代入したいのならmemcpy()でも使う。 それにしてもObjectPascalは、型が緩いんだろうか。
- 207 名前:205 mailto:sage [2008/11/05(水) 16:37:40 ]
- >>206 ありがとうございます。
memcpy()で期待通りに出来ました。 delphiだとなぜか使えるんです。
- 208 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:14:41 ]
- wiiリモコンのライブラリってどこにあるんですか
ttp://www.thinkit.co.jp/cert/article/0711/2/5/2.htm に載ってるところ探しても無いんですが
- 209 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:43:09 ]
- あるじゃん
- 210 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:32:35 ]
- あ、あった
ここですね ttp://wiiyourself.gl.tter.org/ どうもです
- 211 名前:デフォルトの名無しさん [2008/11/08(土) 02:14:04 ]
- ここで聞いていいのかわからんけど一応きいてみる
スレチならごめん 今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7968.txt ってとこまではできたんです。2つはできるんですけど 問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、 いろいろしたんですけど詰まってしまいまして どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか
- 212 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:15:22 ]
- gcd(gcd(x, y), z);
- 213 名前:デフォルトの名無しさん [2008/11/10(月) 19:33:43 ]
- ¥nで文字数があわなくて1日中悩んでいたが
¥r¥nかよ! ゲイツのバカヤロー!
- 214 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:58:35 ]
- >>213
何をいまさら。 UNIX原理主義者は始末に終えんな。 それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに 言え。 ちなみに、OS-9の行末コードは'\r'のみだ。
- 215 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 20:31:53 ]
- タイプライターに文句いえ
- 216 名前:デフォルトの名無しさん [2008/11/11(火) 07:09:03 ]
- 初歩的な質問なのですが、
staticはどう言った変数や関数に付ければ良いのでしょう。 staticの働き事態はわかるのですが・・・
- 217 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:44:01 ]
- >>216
・関数 外部に公開しない全ての関数につける。 単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。 ・変数 自動変数で事が足りない場合。 関数外部で宣言したい場合で、外部に公開する必要がない場合。
- 218 名前:デフォルトの名無しさん [2008/11/11(火) 12:09:23 ]
- C++でビットマップを表示するのに、("ファイル名")ではなく(variable)を使用するにはどうしたらいいでしょうか?
例: String^ variable = "C:ファイル名"; Bitmap^b = gcnew Bitmap(variable); // エラー
- 219 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:04:54 ]
- C++/CLIは別スレへ
- 220 名前:デフォルトの名無しさん [2008/11/11(火) 15:47:57 ]
- コンパイルをすると
_declspec(align('16'))の仮引数は配置されません とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは どういったときに出るのでしょうか・・・
- 221 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:35:36 ]
- Ubuntu 8.10 で手持ちの ANSI C プログラムをコンパイルしようとしたら、
usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね? ちなみに Darwin の cc でコンパイルしたときはうまくいきました /usr/include/unistd.h をみてみると #if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED) ... #endif で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの やっぱり定義されてないと言われます。 ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?
- 222 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:49:13 ]
- www.linux.or.jp/JM/html/LDP_man-pages/man3/usleep.3.html
> POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。 > POSIX.1-2008 では、 usleep() の規定が削除されている。 とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう
- 223 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:07:14 ]
- >>221
ansi cにusleep()などない!
- 224 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 23:26:53 ]
- >>218
まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw
- 225 名前:221 mailto:sage [2008/11/12(水) 09:58:31 ]
- >>222
情報どうもです。 とりあえず #ifndef __USE_BSD # define __USE_BSD # include <unistd.h> # undef __USE_BSD #else # include <unistd.h> #endif としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います
- 226 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:21:41 ]
- メモリリークを調べるため_CrtSetDbgFlag関数を使おうとして
以下のように書いたのですがリンクエラーが出ます #include <crtdbg.h> ・ ・ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // メモリリーク検出 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); ・ ・ ・ } エラー内容 GameT error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。 他にも何かインクルードする必要がありますか 開発環境はVS2003で、OSはWinXP_SP3です
- 227 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:05:07 ]
- ゲ製板からの出張乙
リンクエラーと自分で書いてるだろ するべきことはインクルードではない
- 228 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:54:30 ]
- リリースビルドだったりしてな。
- 229 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:37:24 ]
- 2003にあったっけ?
- 230 名前:226 mailto:sage [2008/11/14(金) 23:40:50 ]
- >>227
なぜゲ製板とわかるのでしょうか >>228 DebugかReleaseのとこですよね Debugにしています よくわからないので新規プロジェクトで試したらできました これに少しづつ作ったものを貼り付けていって原因を探してみる
- 231 名前:デフォルトの名無しさん [2008/11/15(土) 23:28:04 ]
- 不特定多数のデータを受け取る際に、スペースで区切りながらそれらを配列に格納するにはどうすればよいのでしょうか。
例として、 「2 3 5 6」 「2 3 1 3 4 5 2」 というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。 入力は 2 3 5 6(ここでエンター) 2 3 1 3 4 5 2 となります。 コードと一緒に解説してくださるとありがたいです。
- 232 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:16:28 ]
- つ[strtol()]
- 233 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:52:12 ]
- すいません。
C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか? プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、 よろしくお願いします。
- 234 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:03:27 ]
- コンパイラの教科書の最初の方に載ってるよ
- 235 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:12:08 ]
- アサーションをインラインで宣言して、どこの行でエラーが起こったか知りたいです。
以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が 表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか? 実行環境 gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3) ubuntu8.4 ソースコード == #include <cassert> #include <iostream> inline void MUSTOK(bool cond) { if(!cond) { std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl; } assert(cond); } int main(int argc,char *argv[]) { MUSTOK(0==1); return 0; } == 実行結果 file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted
- 236 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:21:33 ]
- >>235
MUSTOKをマクロで実装するしか。
- 237 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:23:50 ]
- >>235
backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。
- 238 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:04 ]
- >>234さん
233です。ありがとうございました。 書泉に行ったときに探してみます。
- 239 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:33:25 ]
- Cのプログラムで、他のプログラムhogeをコマンドラインパラメータ付きで実行し、
その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、 どうすればよいでしょうか?標準のC関数だけでできますか?
- 240 名前:デフォルトの名無しさん [2008/11/16(日) 12:40:35 ]
- できません。winAPIでやってください
- 241 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:50:22 ]
- Cで、引数で指定されたファイルを、system関数を使って、
メモ帳で開くにはどうすればよいでしょうか? ご教授お願いします。
- 242 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:58:13 ]
- system("メモ帳の場所 引数で指定されたファイル")
あとは www.google.co.jp/search?q=C%8C%BE%8C%EA+system から探しなー
- 243 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:06:03 ]
- >>240
馬鹿も休み休み言ってください。 >>239 一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。 但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、 コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。 コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。 >>241 system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら 文字列を組み立てればいい。
- 244 名前:デフォルトの名無しさん [2008/11/16(日) 13:36:09 ]
- リソースから拾ってきた文字に対して置換ってどうやってる?
たとえば 「File %1 is too long.」 ⇒ 「File "C:\hogehoge.foo" is too long.」 みたいな。 変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、 ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと 思って… 教えてエロい人><
- 245 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:39:01 ]
- >>244
%1を適当に変換してから、sprintf()
- 246 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:18 ]
- 置き換えしたいところを%sとかにして、sprintf使うとか。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:47 ]
- boost::format使えば楽じゃね。
- 248 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:48:57 ]
- >>245、246
そうか、%1 じゃなくて別にいいんだもんね。 「File %s is too long. (sizeof: %s. current: %s)」 とかにして順番に sprintf の引数に積めばいいのか! >>247 STLワカンネ・・・orz でもせっかくなので勉強してくるYO! 即レスthx!!! みんな優しいね。大好き。
- 249 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:02:14 ]
- FormatMessage の立場がねーな、おい。
- 250 名前:デフォルトの名無しさん [2008/12/17(水) 02:15:02 ]
- 入力によって処理を変えるプログラムを作っていて、予期せぬ入力があった時メッセージを表示して、もう一度入力させるプログラムを作っているのですが、2度同じ表示が出てしまいます。
for(;;) { scanf("%c",&input); if(input == 'S' || input == 's') { printf("GAME START!¥n); } else if(input == 'Q' || input == 'q') { printf("GAME QUIT¥n"); return 0; } else { printf("input failed¥nPlease input again¥n"); } } どこを変更すれば、2度表示されなくなるでしょうか。 よろしくお願いします。
- 251 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 02:35:15 ]
- たぶん改行('\n')が残っているんだと思うよ。
scanf()の後に、 if ( input != '\n' ) { while ( (c = getchar()) != '\n' ) { ; /* 意図した空文 */ } } こういうの追加しておくとか。 scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。 fgets(,,stdin)で、上記と同じようにするとか。 ゲーム作っているみたいだから、がんばってとしか言えないけど。
- 252 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 07:48:35 ]
- const で変数宣言する必要性を教えて下さい
- 253 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:46:16 ]
- >252
・誤って内容を変更するコードを書いた場合エラーになる。 ・(条件が揃えば)定数として使える。
- 254 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 08:59:45 ]
- >>251
弄っていたら、 scanf("%c",hoge); を scanf("%s",hoge); にしたら出来ました。 ありがとうございました。
- 255 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 08:36:18 ]
- 質問です。
後処理さえすれば、コンストラクタで例外を投げても良いと聞いたんですが、 自分自身(this)がリークすることはないんでしょうか?
- 256 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:35:37 ]
- ないよ。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:55:39 ]
- ありがとうございます。
これで安心して例外投げれます。
- 258 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 12:10:50 ]
- >>255
これだね。 www.kijineko.co.jp/tech/superstitions/memory-leak-at-dynamic-creation-fail.html
- 259 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 15:58:08 ]
- 大変参考になるリンクどうもです。
スッキリしました^^
|

|