1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.44【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1194016813/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
666 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 15:46:00 ] 情報が欠けているので確信はないけど、 たぶん itoa() が値を返さない仕様で、UART_1_PutString(char*) に渡せない。 itoa(line, iData, 10); UART_1_PutString(line); にすればokかもしれない。
667 名前:651 [2007/12/21(金) 15:46:06 ] >>661 stdlib.hの中身A。。 char *ftoa(float f, int *status); int abs(int); double atof(CONST char *); int atoi(CONST char *); long atol(CONST char *); void itoa(char *string, unsigned int value, int base); void ltoa(char *string, unsigned long value, int base); int rand(void); void srand(unsigned); long strtol(CONST char *, char **, int); unsigned long strtoul(CONST char *, char **, int); #if !defined(_M8C) void abort(void); void *calloc(size_t, size_t); void exit(int); void free(void *); void *malloc(size_t); void _NewHeap(void *start, void *end); void *realloc(void *, size_t); #endif #endif
668 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 16:01:38 ] VC++2008を使っているのですが、ソースファイル変更を施していない上に、ソースファイルが存在しているのに、逆アセンブリ表示でしかデバッグができません。 これは何か知らないうちに変な設定をしてしまったからなんでしょうか? どなたかご存知の方いらっしゃいましたらご教授ください。
669 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 16:02:08 ] はい、ダミアンが正解だったようです。
670 名前:668 mailto:sage [2007/12/21(金) 16:03:13 ] ちなみにビルドの際にも、ソースファイルはプロジェクト中に存在しています。
671 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 16:03:24 ] >>668 VisualStudio専用スレがあるからそちらでどうぞ。
672 名前:668 mailto:sage [2007/12/21(金) 16:05:07 ] はい。
673 名前:デフォルトの名無しさん [2007/12/21(金) 17:39:14 ] >>666 ありがとうございました。解決できました。
674 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 18:30:39 ] WinXP,VC++2005について質問です. DOSコマンドのassoとftypeのように,特定の拡張子に関連付けされた アプリケーションをできればフルパスで取得したいのですが, VC++で可能でしょうか?
675 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 21:04:40 ] 関連付けならレジストリのHKEY_CLASSES_ROOT以下を見ればいい。
676 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:22:15 ] HDD片方だけぶっ壊れたせいで復旧作業泣ける、嫌になってレジストリ削除とエントリ削除結構適当だから不安 あー、もうしにたい
677 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:37:01 ] ごばくだうわあああorz
678 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 01:32:45 ] 初めて見たんだけど、’あっそ’ってどんなコマンドなん?
679 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 07:10:49 ] >>678 assocの間違いだと思う。
680 名前:デフォルトの名無しさん [2007/12/22(土) 10:03:06 ] >>485 です 回答くださったみなさん、ありがとうございます。 三項演算子は勉強になりました。 >>502 の参照からポインタとって操作するのがわかりやすかったので、 この方法でいこうと思います。 has()が返すアドレスの実態はgetで得られるインスタンスと一緒です。
681 名前:674 mailto:sage [2007/12/22(土) 10:24:21 ] >>678 ,679 すみません.assocの間違えです. c++でできるコマンドがありましたらお願いします.
682 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 10:34:14 ] >>674 >>681 それは OS 無しで知りえない情報だから system (みたいなもの) 使うしかないんじゃないの?
683 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:02:30 ] クラス配列の要素数の求め方を教えてください。 class_array = new Class[10](); sizeof( class_array ) / sizeof( class_array[0]); てやっても0になってしまいます。 sizeof( class_array ) ってすると4になるんですが、 この4が何かが分かりません。 例えば普通の10個の要素を持つ配列をsizeofすると、配列のサイズが返りますよね。 クラス配列にsizeofすると、また別の意味の値を返すのでしょうか。
684 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:04:52 ] >>683 sizeof(class_array)/sizeof(class)じゃ無理?
685 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:13:35 ] >>684 レスありがとうございます。 できないです…。結果は0になりました。 sizeof( class_array ) が 4 sizeof( CLASS ) が 16 になっていました。 普通の配列にsizeofすると配列のサイズが返ってくるのに、 クラス配列にsizeofした時、配列は16*10=160のサイズを持っている はずなのに、4しか返ってこないということは、、、 どういう事なんですか??
686 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:13:56 ] >>683 class_array はただのポインタだろ。そうじゃなきゃ new [] の結果は受け取れないはず。
687 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:16:27 ] ああ、new
688 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:20:27 ] >>686 なるほど、sizeof( class_array ) では、ただのポインタのサイズを返しているわけですね。 sizeof(またはそれ以外)を使用してクラス配列全体のサイズを調べるにはどのようにすればよいでしょうか。
689 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:23:34 ] >>688 sizeof にこだわらなければ 10 に決まってんだろ。 即値を繰り返すのが嫌なら定数なり変数なりに入れとけ。 配列と別の変数でサイズを持ってるのが嫌なら std::vector にしとけ。
690 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:23:59 ] new[]したもので、要素数を後から知る方法はない。 std::vectorでも使っておけ。
691 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:29:13 ] 恐らくだけど、newに拘る必要はないんじゃないか? newを知らずに使っているように見受けられる
692 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:30:42 ] vectorを調べてきました。 こんな便利なものがあったなんて、、 std::vectorを使います! 答えてくださった方々ありがとうございました!
693 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:34:17 ] >>691 クラス配列の要素を動的に増やしたり、減らしたりしたかったのです。 mallocはコンストラクタが動かないと聞いたんで、newを使っていました。 その結果sizeofで要素数を求めようと頑張っていたのですが、 vectorでなんとかなりそうな気がします。 ありがとうございました。
694 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:37:49 ] CやC++でGUIなユーティリティを作る場合何を使うのがベターなんでしょうか? 先日本職さんの知り合いに聞いたところMFCだと言っていました それと同時にCやC++で作るならゲームかなぁみたいなことも言っていました やはりCやC++でGUIというのはあんまりベターじゃないんでしょうか? API直接だとかデザイナついたやつだとか、もしくははなからCは使わないだとか
695 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:41:20 ] 趣味でやるのか、仕事でやるのか 自分だけで使うのか、人に売るのか これからも続けていきたいのか、今回作ったら終わりなのか もろもろの事情による
696 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:43:00 ] >>695 一応趣味で、これからも使っていく予定です 人に売る気はないですが、良さそうなものが出来たら公開してみたりしたいなぁくらいには考えています
697 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:45:58 ] C++Builderかね。
698 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:46:29 ] MFC WTL ATL ボーランドC++
699 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:50:00 ] 趣味ならCやC++だけと言わずC#にも手を伸ばしてみるのはどうだろうか
700 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:52:30 ] 売るつもりが無いならC#は楽でいいな
701 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:02:48 ] C#は一応手を出したことがあるんですが、デザイナがあるだけでどうもそれに頼り切ってしまって そのせいかどうも感覚を掴めない まだWinAPIで試行錯誤していた時の方が気が楽でしたorz とりあえず今Turbo++Explorerとやらをダウンロード中です。 最終的にはVC++を買うことになりそうだなぁ
702 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:09:11 ] プログラミング勉強中なのですが質問させて下さい。 あるファイルから内容を読み取ってデータを抽出して別のファイルに書き出すプログラムを作りたいのですが #include "fstream" using namespace std; void main(int argc, char *argv[]){ ifstream f1; f1.open(argv[1],ios::in); 中略 f1.close(); ofstream f2; f2.open("data.txt",ios::out); 中略 f2.close(); } このようなプログラムを実行するとD&Dしてプログラムを実行した時ofstream f2;以降の書き込み動作が出来ていないようなのです。 何がいけないかいろいろ試してみたのですが、ファイルを読み込む部分をソースから消して書き込む場所だけにしてみても D&Dして実行すると駄目で、D&Dしないで実行すると普通に書き込めるみたいなのですが これはどういう理由からなんでしょうか。
703 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:35:07 ] >>702 >D&Dして実行する って、何をどうやって実行してるの? その場合って、argvに対象のファイル名がちゃんと渡ってくるものなの?
704 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:39:35 ] >>703 上記のプログラムをコンパイルしてできたexeに読み込ませたいtxtをD&Dで実行ということです。 途中にcout << argv[1]を入れてみたところD&Dしたtxtはフルパスで格納されていました。 ですが ofstream f2("data.txt",ios::out);のdata.txtへの書き込みが出来ない状態です。 追記ですがコンパイルはVC++2005です。
705 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:47:27 ] いや、きっとdata.txtは出力されている。 PCの中を検索すればどこかにあるはずだ。 argv[1]が絶対パスだったら、f2で書き込むファイルも argv[1]のファイルと同じフォルダになるよう絶対パスで指定するという風にすればいい。
706 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:10:01 ] printfで\の半角は表示できませんか?
707 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:10:51 ] >>705 argv[1]で絶対パス渡すと後のファイルオープンのパスに影響与えてしまうってことですかね? 確かに絶対パスを渡したら指定のフォルダにきちんと出力されました。 ありがとうございます。
708 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:19:16 ] >>706 printf("\\");で出力されるのが、半角円記号だというのなら、 それはそういう風にフォントが出来ているから。 日本では、歴史的経緯で半角バックスラッシュが用いられるべきところに半角円記号が使われる。 今更、円記号とバックスラッシュに分離しようとしてもおそらく極めて困難。
709 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:39:52 ] >>706 フォントに依存するんじゃないかと
710 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 17:03:42 ] turboC++Explorer落としに行ったけどあれでよかったのだろうか
711 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:31:41 ] >>707 もう解決したようだけど、 D&Dでは作業フォルダに注意ね
712 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:18:03 ] std::vector<unsigned char> buffer( 100, 0 ) buffer[100][0]という意味ですか?
713 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:19:14 ] 100個確保して0が入っているという意味 buffer[100]=0
714 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:25:09 ] std::vectorでは二次配列は確保できないのですか?
715 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:25:43 ] あ、、こうやればいいいのか std::vector<unsigned char> buffer[a][b];
716 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:28:45 ] >>715 vectorをa×b個作るの? vector<vector<unsigned char> >では?
717 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:29:55 ] >>714 std::vector<std::vector<unsigned char> > vec(100, std::vector<unsigned char>(10));
718 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:31:39 ] thx!
719 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:36:02 ] >>713 1行目と2行目が違うのだが・・・
720 名前:デフォルトの名無しさん [2007/12/22(土) 21:11:53 ] Cのdouble型で表せる最大の数と最小の数はなんですか?
721 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:12:57 ] 環境による 64ビットが普通だけど
722 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:14:05 ] >>721 計算した値がdouble型の精度を超えてたらエラーとするにはどうしたらいいですか?
723 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:16:00 ] 代入前に比較
724 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:16:30 ] 具体的にどうやるんですか?
725 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:16:48 ] 代入前に比較
726 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:20:26 ] 演算できる上限はどうなってるんだろうな、代入時に分割して代入するとか意味はあるんだろうか
727 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:22:16 ] BCBだとlong doubleは10バイトなのに、なんでVC++だとdoubleと変わらない8バイトなんですか
728 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:24:18 ] >>727 俺の自作コンパイラでは9バイトだぜ
729 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:26:01 ] unsigned long long int=unsigned long long int*unsigned long long int これで溢れる時 unsigned long long int=(unsigned long long int*unsigned long long int)/2 実際の何割とか決めてって話か
730 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:32:25 ] double型の演算が大きすぎてコンパイラが停止するのを制御できますか?
731 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:44:53 ] >>727 MSのも16bit用のコンパイラは10バイトだった。最終はVC++1.5だったか。 10 byte realがIntel x87の内部形式で他と互換が無いこと、 Intel自身も将来的に実数のSMIDを予定してたので10 byte realを データ型として扱うのは非推奨だったことから廃止した。
732 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:47:21 ] これはどこが駄目ですか? 実行中にエラーになります for(n=0;n<1000;n++){ try {x=x*x;} catch (...) {break;} }
733 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:47:50 ] int n; double x=3;が入ります
734 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:53:59 ] >>732 まずエラーメッセージ嫁。意味が分からなければコピペして見せろ。 ソース貼るならコンパイルできるようにしてくれ。 n や x の宣言が無いのでなんともいえない。
735 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:55:52 ] xが凄まじい勢いで増えるから
736 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 21:55:54 ] >>732 double でも確実にオーバーフローするだろ。何がしたいんだ?
737 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:01:26 ] オーバーフローを起こしたらbreakするにはどうしたらいいんですか
738 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:09:38 ] >>737 演算前に比較。
739 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:10:34 ] それはどうやるんですか
740 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:12:48 ] 演算する前に、演算後にオーバフローするかを比較する。
741 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:13:19 ] それはどうやるんですか
742 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:16:45 ] オーバーフローしないように式変形する。
743 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:17:22 ] オーバーフローの例外は察知できませんか
744 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:19:36 ] 例外なんて起こらない。
745 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:37:39 ] POD型(intとかcharとか)の演算で例外は投げられない。 このようなプリミティブな型の演算が例外を投げるようにすると 実行速度及びCとの互換性に影響がある、と、びよよーん先生はお考えになった。 いや、知らんけど。
746 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:49:51 ] では最大値をしるにはどうしたらいいんですか? #define とかは使わない方法ありますか
747 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:50:52 ] float.h に定義されている
748 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:52:36 ] #define で定義されている値を使わずに求める方法はありますか
749 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:52:58 ] C++ なら std::numeric_limits<double> でどうぞ。
750 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:53:54 ] std::numeric_limit<double>::max()
751 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:54:26 ] ごめん。numeric_limits が正しい。
752 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:05:55 ] たとえばunsigned int型なら足す続けると0に戻って最大値が判明するけど そういうのはできないですか
753 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:07:25 ] >>752 >足す続けると 日本語を母国語としない方ですか? それはさておき、double値はそういうわけにはいきません。
754 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:08:00 ] >>752 符号無し整数型以外は、演算で値が範囲外になると未定義動作。
755 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:08:57 ] なんでそんな事をやりたいのかが分からんが、 double でそういう事をやる場合は、かなり難しい。 小数のフォーマット(環境依存)に依存するし、 非正規化数というのがまた状況をややこしく・・・。
756 名前:754 mailto:sage [2007/12/22(土) 23:09:01 ] ん?符号付き整数は未定義動作だけど、不動小数点数型は実装依存で 可能かもしれないな。
757 名前:754 mailto:sage [2007/12/22(土) 23:09:48 ] ごめん。 s/不動/浮動/
758 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:09:49 ] でも限度を超えたら増え続けないから n < n+1が成り立たなくなるよね
759 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:11:11 ] >>756 環境依存でいいのなら方法はそりゃあるけども。
760 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:12:23 ] >>758 だから何?
761 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:13:16 ] 何に対して「でも」なんだろう?
762 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:22:03 ] ここは一問一答スレですか?
763 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:35:54 ] >>727 BCBの場合はDelphiのExtended型との互換性のほうが大きいかも
764 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:55:55 ] void MsgBox( int a ) { char s[20]; sprintf(s, "%d", a); MessageBox(NULL, s , NULL , MB_OK ); }; 直接数字を表示したいのだが、一回文字列に変換しないといけないのかな?
765 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:03:39 ] 直接数字を表示できるMessageBoxを作ったらいいじゃないか
766 名前:デフォルトの名無しさん [2007/12/23(日) 01:12:22 ] 標準ライブラリとかで見かける名前空間の名前がついてない 「::operator new」 とか「::operator delete」ってなぜ 「std::operator new」とか「std::operator delete」じゃないんですか?