- 1 名前:デフォルトの名無しさん [2011/09/15(木) 00:17:43.25 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ 01 pc11.2ch.net/test/read.cgi/tech/1167476845/ 02 pc11.2ch.net/test/read.cgi/tech/1178503366/ 03 pc11.2ch.net/test/read.cgi/tech/1187521676/ 04 pc11.2ch.net/test/read.cgi/tech/1221633708/ 05 pc11.2ch.net/test/read.cgi/tech/1230516307/ 06 pc11.2ch.net/test/read.cgi/tech/1231564903/ 07 pc11.2ch.net/test/read.cgi/tech/1232983248/ 08 pc12.2ch.net/test/read.cgi/tech/1235921779/ 09 pc12.2ch.net/test/read.cgi/tech/1240022781/ 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ 14 pc12.2ch.net/test/read.cgi/tech/1269273471/ 15 pc12.2ch.net/test/read.cgi/tech/1273368706/ 16 hibari.2ch.net/test/read.cgi/tech/1279285647/ 17 hibari.2ch.net/test/read.cgi/tech/1285115590/ 18 hibari.2ch.net/test/read.cgi/tech/1291571263/ 19 hibari.2ch.net/test/read.cgi/tech/1308106024/
- 2 名前:デフォルトの名無しさん [2011/09/15(木) 16:27:52.49 ]
- 乙
- 3 名前:デフォルトの名無しさん [2011/09/15(木) 17:05:51.53 ]
- Cはヨーグルトの味がしますか?
- 4 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 00:22:38.87 ]
- Cは醍醐味
- 5 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 05:25:30.11 ]
- 白かよ、青かよ、ウォッシュかよ?
- 6 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 07:26:08.22 ]
- >>5
喰える、喰えない、割と好き
- 7 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:39:07.68 ]
- ちょっと和んだw
- 8 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:06:04.88 ]
- 質問です。VC++ 2008 Express で
ttp://k3tec.net/neko_wiki/index.php?C%2FC%2B%2B%A5%BD%A5%B1%A5%C3%A5%C8%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%C2%E8%B0%EC%B2%F3 を参考にサーバ・クライアントプログラムを作っているのですが、実行すると server.exe の 0x85c7ec4d でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x85c7ec4d を読み込み中にアクセス違反が発生しました。 というエラーが出て困っています。Segmentation Fault だと思うのですが、簡単なテストプログラムではエラーが出ないので原因がよくわかりません。 対処方法がわかる方いましたらご教示ください。 以下、ソース #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> using namespace std; enum COMMAND { CMD_NOP, CMD_LOGIN, ....... };
- 9 名前:つづき mailto:sage [2011/09/21(水) 08:06:20.37 ]
- class Message {
SOCKET _dst_socket; COMMAND _command; public: // コンストラクタ、デストラクタ、セッタ、ゲッタ ... virtual int sizeOf() cosnt { return sizeof( *this ); } }; class TextMessage : public Message { char _text[ 16 ]; public: // コンストラクタ、デストラクタ、セッタ、ゲッタ ... virtual int sizeOf() const { return sizeof( *this ) } }; class Server{ ... }; bool Server::send( SOCKET dst_socket, const Message& msg ) { if( ::send( dst_socket, (char*) &msg, msg.sizeOf(), 0 ) != SOCKET_ERROR ) // このへんで sizeOf() を呼ぶとエラー。sizeof( TextMessage ) とかだとOK } class Tester { public: static void test( const Message& msg ) { cout << msg.sizeOf() << endl; } }; int main() { TextMessage tmsg; Tester::test( tmsg ); // これはOK ... }
- 10 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:12:50.28 ]
- sizeOf()を呼ぶとエラーじゃなくて、sizeOf()を呼んだ後の次のsizeOf()で死ぬんだろ。
それなら原因は想定できた。
- 11 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:15:04.46 ]
- こいつはくせえーッ!Java厨のにおいがプンプンするぜッーーーッ!
- 12 名前:8 mailto:sage [2011/09/21(水) 09:06:04.18 ]
- >>10 ヒントだけでもお願いします。
ついでにJava厨臭くない方法があったら教えて下さい。
- 13 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 09:34:10.54 ]
- >>9
それが>10の言いたいことかどうかは知らんが、(char *) & msgはsend()に渡すべき場所を指しているかデバッガでよく見てみたら? つーか、Cスタイルキャストは使うなや。
- 14 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 14:24:19.16 ]
- 広域の::send()関数の引数に、Messageクラスのポインタを(char*)にキャストして
渡してまともに動作するものなのか? TextMessageの場合は、たまたまクラスの銭湯に_test[16]があれば動作するかも知れないが…
- 15 名前:8 mailto:sage [2011/09/21(水) 14:27:30.20 ]
- 自己解決しました。
クライアントから送られてきたデータをそのまま流用しようとしたため sizeOf のアドレスが異なっていたようです。 char data[ SIZE ]; recv( src_socket, data, _countof( data ), 0 ); TextMessage tmp, msg; memcpy_s( &tmp, sizeof( TextMessage ), data, sizeof( TextMessage ) ); msg = tmp; server.send( dst_socket, msg ); としたらうまくいきました。 情報不足の質問をしてすみませんでした。アドバイスくださった方、ありがとうございました。
- 16 名前:8 mailto:sage [2011/09/21(水) 14:35:44.97 ]
- あ、sizeOf のアドレスじゃないや。まあいいや
- 17 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 00:48:42.18 ]
- アドバイスを受けて事故解決かよ。おめでてーな。
- 18 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 11:31:13.74 ]
- 以下のような宣言に対して…
template< class T1 > class CHoge { void f1(); template< class T2 > void f2(); }; f1(),f2()の定義を宣言と分けて書きたい場合,f1()は, template< class T1 > void CHoge< T1 >::f1(){ ... } と書きますが, f2()の実装はどのように書けばよいのでしょうか?
- 19 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:27:06.20 ]
- template <class T1> template <class T2> void CHoge<T1>::f1<T2>() { ... }
- 20 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:36:30.97 ]
- エラーが出ます
template <class T1> class CHoge { T1 t; void f1(); template <class T2> void f2(); public: CHoge(T1 x) : t(x) {} }; template <class T1> void CHoge<T1>::f1() { std::cout << t << std::endl; } template <class T1> template <class T2> void CHoge<T1>::f2<T2>() { std::cout << static_cast<T2>(t) << std::endl; } error: function template partial specialization 'f2<T2>' is not allowed
- 21 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:39:24.95 ]
- template <class T1> template <class T2> void CHoge<T1>::template f2<T2>() { ... }
- 22 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:43:18.70 ]
- >>21
>>20と同じエラーが出ます
- 23 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:55:45.20 ]
- template <class T1> template <class T2> void CHoge<T1>::template f2() { ... }
- 24 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 15:00:15.12 ]
- >>23
ありがとうございます template <class T1> class CHoge { T1 t; public: void f1(); template <class T2> void f2(); CHoge(T1 x) : t(x) {} }; template <class T1> void CHoge<T1>::f1() { std::cout << t << std::endl; } template <class T1> template <class T2> void CHoge<T1>::f2() { std::cout << static_cast<T2>(t) + 0.5 << std::endl; } int main() { CHoge<int> c(1); c.f1(); c.f2<double>(); }
- 25 名前:18 mailto:sage [2011/09/22(木) 15:49:42.60 ]
- >>19〜24 感謝.
- 26 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:13:14.04 ]
- 計算式の入った文字列("1+2*3"など)を用意しておいて、その計算結果(先程の例では7)を変数に代入するみたいなことって出来ますか?
- 27 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:32:01.78 ]
- >>26
自分でパーサー書けば出来る
- 28 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:59:16.78 ]
- >>26
Lua使えば1分でそういうコードが書けるよ
- 29 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 01:57:41.81 ]
- boostでなかったっけ
- 30 名前:デフォルトの名無しさん [2011/09/26(月) 13:40:15.69 ]
- L"abc"のLって何ですか?
一文字なのでぐぐれなくて困っています。
- 31 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 13:44:45.38 ]
- >>30
ワイド文字
- 32 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 18:51:14.14 ]
- 「C言語 文字列 L」でぐぐったら一発だったが
- 33 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 19:17:29.98 ]
- X a(),b(),c(),d();
〜 if(is_true) return; 〜 Y e(); } → if(!is_true)e.~e();→ d.~d();→ c.~c();→ b.~b();→ a.~a(); RAIIは開放の順番は規定されてるの? それとも順不同?
- 34 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 19:59:55.36 ]
- >>33
X a()は返却値X型で引数をとらない関数aの宣言で解放もなにもないし 変数の構築と破棄の順序関係はRAIIなんかとは直接関係ない変数に関する普通の話だしでつっこみどころしかない。 最低限の知識が正しく身についてない人にはそれより先は教えようがないぞ。
- 35 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 20:13:36.69 ]
- >>33
規定されてるよ >>34 struct A{}; A a();
- 36 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 21:54:42.25 ]
- デストラクタコール記述のつもりだろうが変数名でデストラクタ書いてるwwから
生兵法君が鼻息荒げて訳判らん(キリッしちゃったんだろうな
- 37 名前:デフォルトの名無しさん [2011/09/27(火) 21:03:18.94 ]
- もう何度も質問されていると思いますので簡潔にでいいのでお答えいただけないでしょうか?
PHPやJavaScriptは習得しているのですが、ちょっとC系が必要になりそうなのです その際、C -> C++と学習したほうがやはりいいのでしょうか? CはC++に吸収済みとか言う人もいるようですが オブジェクト指向に関しましてはまぁ少々は慣れていると思います やはりC++をいきなりというのはつまずく点が多いのでしょうか? また、CとC++はオブジェクト指向以外にも違いはあるのでしょうか? Webで調べたのですがいまいち分かりませんでした
- 38 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:15:01.97 ]
- >>37
必要な言語を学習したんでいい。C++が必要なら最初からそっちでおk Cにオブジェクト指向とテンプレート(ジェネリックプログラミング)、例外を加えたのがC++だな
- 39 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:25:22.74 ]
- ご回答ありがとうございます
>必要な言語を学習したんでいい とはPHP等のオブジェクト指向を学習しているので、そのままC++にいってもいいという意味でしょうか? Cで出来ることはC++で出来ると聞いていますので、C++に行こうかと思いました
- 40 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:59:07.32 ]
- >>39
仕事でも趣味でも受験でも、目的があるならそれに沿った言語を選択して学習すればいい。 学習そのものが目的なら自分で調べて悩んで下さい。学習になります。
- 41 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 22:22:48.68 ]
- >>37
CとC++の肝はメモリー管理。 どちらからやっても同程度に壁になる
- 42 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 23:08:30.45 ]
- 日頃C++をバリバリ使ってると、Cの仕事は苦痛。
日頃Cをバリバリ使ってると、C++の仕事は苦痛。 その程度には違うので、C系なんてごまかしてないで、 プロジェクトに必要な方をやるべし。両方必要なら迷わずC++。
- 43 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 10:13:54.66 ]
- 設計がしっかりしてればどっちでやっても大差ない
- 44 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:08:19.61 ]
- アルゴリズムの話なのですが、
手続き型言語でコールバックは悪ってのは何故なんでしょうか。
- 45 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:10:23.06 ]
- 悪じゃないです
- 46 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:44:47.44 ]
- 純粋な手続き型ではA-B-C-D-Eという流れなら毎回A-B-C-D-Eの順で処理が進んでいくけど
コールバックが入るとA(ハンドラ登録)-コールバック-B-C-D-Eだったり A(ハンドラ登録)-B-C-D-E-コールバックだったりと処理の順序関係が安定しなくなる、 あるいは順序を安定させようとするとマルチプロセス化や待機状態を作るなどの 純粋な手続き型と比べると余計なコストがかかるなどで相性が悪いから。
- 47 名前:44 mailto:sage [2011/09/28(水) 18:57:01.56 ]
- >>46
なるほど、ありがとうございました。
- 48 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:37:53.90 ]
- assertってやめたほうが良くないですか?
デバッグ時に発生しなかったバグケースがリリース時に出たら困りますよね
- 49 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:49:24.57 ]
- >>48
assert使った事ないの?
- 50 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:51:34.90 ]
- >>49
リリース時に例外を投げるassertもどきなら使ってます ボトルネックでは仕方ないからassertですが…
- 51 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:53:58.32 ]
- リリースビルドの意味わからなかったり直接呼んだりしてるなら
ディスパッチャーの中で発生させるアラートや事後アラートがバレると IQの低さを悟られてしまうから止めといたほうがイイとおもうよ
- 52 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:58:18.01 ]
- 煽りはレスしなくて結構です
- 53 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 00:38:50.35 ]
- すでにある構造体(コンストラクタなしの型)のテンポラリオブジェクトを無駄なく構築するにはどうすればいい?
func(hoge(1, 2)); というふうな書き方ができないから { hoge h(1, 2); func(h); } と書いてるんだけど、ダサすぎて困る
- 54 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 00:46:48.17 ]
- >>53
C++ならコンストラクタを書く CならC99のコンパウンドリテラルを使う C89はどうしようもない
- 55 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 17:55:42.79 ]
- printf("%s %d", "hoge", x);
な所が printf("hoge", "hoge", x); こうなるケースがあっても問題ない?
- 56 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 18:03:28.62 ]
- 初心者には意味不明な質問だな
- 57 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 18:36:14.12 ]
- 多いのは問題あるが少ないのは問題ない
- 58 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:08:08.85 ]
- ファイルから文字列を読み込んで,その文字列を名前にもつ関数を呼び出す事ってC,もしくはC++で可能なんでしょうか
例えば func,100 とだけ書かれたファイルを読み込んで,func(100)という風に呼び出したいのです
- 59 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:19:48.85 ]
- if(strcmp(str, "func") == 0)
{ func(num); }
- 60 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:38:38.90 ]
- void hoge(void) { std::cout << "hoge" << std::endl; }
void fuga(void) { std::cout << "fuga" << std::endl; } map<string, void (*)(void)> m; m["hoge"] = hoge; m["fuga"] = fuga; string s; cin >> s; map<string, void (*)(void)>::iterator i(m.find(s)); if(i != m.end()) { (*i)(); }
- 61 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:42:25.38 ]
- あらかじめ用意した関数しか呼び出せねえのかこの糞ゲーは
- 62 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:46:40.08 ]
- 用意してないものを利用できると思うほうがおかしい
- 63 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 20:00:11.71 ]
- >>59
ありがとうございます たぶん,これでもやろうとしてることは出来ないことはないんですが 全部の関数でそれをするのはちょっと辛いなあと思ってたんです 言葉足らずですいません >>60 C++はまだ勉強中なのでよくわからないのですが,おそらくイメージしてたのはこれです mapとか言うのを調べればよさそうな感じですね 勉強になりました お二方,ありがとうございました
- 64 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 22:58:54.79 ]
- 以下のプログラムで実行結果を「ABC」にしたいのですが「ABCBCC」になってしまいます
どうすればいいですかね・・・ #include<stdio.h> int main() { int i; char c[100]={'A','B','C'}; for(i=0;i<3;i++) printf("%s",&c[i]); printf("\n"); }
- 65 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:02:34.67 ]
- %sを%cにする?
- 66 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:05:19.91 ]
- s->c
- 67 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:11:29.79 ]
- >>65
%cにしたら出力が「???」になりました
- 68 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:14:04.75 ]
- printf("%c",c[i]);
- 69 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:15:41.95 ]
- プリントは&いらん
- 70 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:16:03.02 ]
- >>67
申し訳ない >>68が正解だな
- 71 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:17:43.86 ]
- >>68-69
できました!ありがとうございます &はscanfと混同してました・・・初歩的なミスでしたね^^;
- 72 名前:デフォルトの名無しさん [2011/10/04(火) 18:16:34.85 ]
- Boost pythonを使用しようとして
d.hatena.ne.jp/moriyoshi/20091214/1260779899 を参考にしているのですが、vector<int>からpythonのリストへの変換例のコードの意味がわかりません。 参考URL中の .def("__getitem__", (int const&(foo::int_vector::*)(foo::int_vector::size_type) const)&foo::int_vector::at) の中で(int const&以下が何をやっているのでしょうか。さっぱり理解できません。
- 73 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 19:56:17.57 ]
- >>72
foo::int_vector::at へのメンバ関数ポインタを取得するために、 返却値型 int const & で引数は一つで型は foo::int_vector::size_type で const 修飾されてる foo::int_vector のメンバ関数の メンバ関数ポインタ型へ明示的なキャストをしてる。
- 74 名前:デフォルトの名無しさん [2011/10/04(火) 20:22:34.44 ]
- >>73
ありがとうございます。 関数キャストは (返却値型 (ポインタ型)(引数リスト) ) の形式で行うということですね。
- 75 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 21:16:27.46 ]
- なんか正しくわかってないような?
・メンバ関数ポインタ ・オーバーロードされてる(メンバ)関数への(メンバ)関数ポインタの取得 についてわかってるならそれでいいよ
- 76 名前:デフォルトの名無しさん [2011/10/06(木) 01:12:52.40 ]
- vectorの各要素を<algorithm>を使って3乗するとして、
案1 class MyPow { pulic: double operator() (double value){return pow(value, a_) MyPow(double a):a_(a) private: double a_; } に transform(vec.begin(), vec.end(), vec.begin(), MyPow(3.0)); 案2 class MyPow: public binary_func<double, double, double> { double operator() (double value, double a) {return pow(value,a);} } に transform(vec.begin(), vec.end(), vec,begin(), bind2nd(MyPow(), 3.0)) どちらの方が好ましいのでしょうか。どちらでもOK?
- 77 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:15:48.59 ]
- >>76
どちらも単なる関数オブジェクトだから大差ないんじゃね? 強いて言えば案1の方が3.0を内部状態として持つのでそれだけ引数の 受け渡しが減る
- 78 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:48:04.60 ]
- const int n = 10;
int main() { std::vector<double> vec; for (int i = 0; i < n; i++) vec.push_back(std::rand() % 100); std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " ")); std::cout << std::endl; std::transform(vec.begin(), vec.end(), vec.begin(), [](double& x) { return std::pow(x, 3.0); }); std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " ")); std::cout << std::endl; }
- 79 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:04:54.23 ]
- やっぱりラムダ入ったのは大きいよなぁ
- 80 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:19:35.41 ]
- mem_fun_ref(笑)
- 81 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:23:32.07 ]
- -> を使えば一発
- 82 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 09:00:52.21 ]
- やはりここはptr_funの出番d・・・
transform(vec.begin(), vec.end(), vec.begin(), bind2nd(ptr_fun<double, double, double>(pow), 3.0));
- 83 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 21:10:35.55 ]
- もっとクールな方法でパブリックメンバ変数を外から見たらconstに中から見たら非constにできる?
struct hoge { int const x; hoge(void) : x(0) { } hoge(int x) : x(x) { } hoge & operator = (hoge const & h) { const_cast<int &>(x) = h.x; return *this; } void inc(void) { const_cast<int &>(x) += 1; } void dec(void) { const_cast<int &>(x) -= 1; } };
- 84 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 22:12:54.93 ]
- publicなメンバ変数という設計を捨てる
- 85 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 01:07:01.67 ]
- void君と名付けよう
- 86 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 09:26:21.88 ]
- ファイルを適当な変数の配列にファイルサイズ分一気に読み込みたいんですが、
どうすればできますか? 今はこんな風にして凌いでるけど、どう考えても馬鹿らしすぎる std::string buf; std::string DataStr; while(FileStream&&getline(FileStream,buf))DataStr+=buf; char *src=new char [DataStr.size()]; memcpy((void *)src,DataStr.c_str(),DataStr.size());
- 87 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 10:18:33.83 ]
- std::ifstream ifs("test.txt", std::ios::in|std::ios::binary);
ifs.seekg(0, std::ios::end ); size_t size = ifs.tellg(); ifs.seekg(0, std::ios::beg ); char *buff = new char[size+1]; ifs.read(buff, size); buff[size] = '\0'; // ... delete[] buff;
- 88 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 10:54:32.05 ]
- #include <exception>
#include <fstream> #include <iostream> #include <string> #include <vector> template <class A> void readAllAtOnce(char const * path, std::vector<char, A> & data) { std::fstream file; file.exceptions(std::ios::badbit | std::ios::eofbit | std::ios::failbit); file.open(path, std::ios::in | std::ios::binary); file.seekg(0, std::ios::end); std::ios::pos_type end(file.tellg()); file.seekg(0, std::ios::beg); std::ios::pos_type beg(file.tellg()); std::ios::off_type off(end - beg); if(data.max_size() < off) throw std::exception(); data.resize(off); file.read(&data[0], off); file.close(); } int main(void) { try { std::vector<char> buf; readAllAtOnce("test.txt", buf); std::string str(buf.begin(), buf.end()); std::cout << str << std::endl; } catch(...) { std::cout << "err" << std::endl; } return 0; }
- 89 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 23:12:40.33 ]
- 窓板の質問スレでたずねたんだけど、返答がないようなのでこっちでも聞かせてください。
C++でWinXPでネットワーク接続を表示したときに表示される「LANおよび高速インターネット」を 表示するexeを作成したいですが、ネットワーク名なんかはレジストリから取得できました。 しかし、切断したネットワーク名まで表示される状態で上記の内容とはずれてしまっています。 レジストリに保管されているネットワークから現在接続されているネットワークだけ表示したいんですけど、 何をフラグとしてしているのかがわかりません。 どなたかご教授お願いします。
- 90 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 01:12:36.92 ]
- blogs.msdn.com/b/jpwdkblog/archive/2009/09/29/9900575.aspx
devcon status =net でdisabled/runningの判別がつくけど他にいい方法があるかもしれん
- 91 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 01:19:16.35 ]
- >>87-88
ありがとう、seekgを使うのがポイントなのね
- 92 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 03:43:03.15 ]
- イテレータってインクリメントやデクリメントだけでなく、+1や-1でも前後の要素にアクセスできる?
- 93 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 09:19:56.59 ]
- 自分で試したほうが早かった。できた
- 94 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 09:38:55.18 ]
- 浮動小数点数をバイナリで保存するにはどうすれば?
- 95 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:44:11.90 ]
- fwrite
ofstream::write
- 96 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 11:18:44.56 ]
- >>90
ありがとう。 devconは知らなかった。試してみる。
- 97 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:31:47.94 ]
- ローベルのC++入門講座をお持ちの方にお聞きしたいのですが、
P308の演算子オーバーロードの流れがよくわかりません。 > delete[] m_array; > m_array = array; deleteしたにも関わらず直後にdeleteしたものを使っていて混乱しています。
- 98 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:35:20.40 ]
- ロベールの翻訳は分かりやすい
- 99 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:36:11.26 ]
- その2行だと。
deleteしたのは、m_arrayのポインタが指す領域。 m_arrayはまだ残っている。 そこに、arrayのエリアのポインタを再設定しただけ。
- 100 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:37:57.79 ]
- ×そこに、arrayのエリアのポインタを再設定しただけ。
○そこに、arrayの中にあるポインタを再設定しただけ。
|

|