- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:00:47 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 159 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:08:37 ]
- vectorやらlistを使用する際
コンストラクタで指定した長さ以上の要素を食わせるとどうなるのでしょうか?
- 160 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:09:22 ]
- >>159
「食わせる」って何?
- 161 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:10:32 ]
- ああ、すいません
要素数20のlistに21個目の要素を追加しようとするとどうなるのかなぁと
- 162 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:11:03 ]
- int型の変数をchar型の配列にするにはどうすればいいのでしょうか?
- 163 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:13:13 ]
- >>161
そりゃ、追加されるんだろ。
- 164 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:15:17 ]
- >>161
STLのコンテナは、追加はいくらでもやってよい。 コンストラクタで要素数を指定するのは、 あらかじめメモリを確保しておくことで、後から再確保するのを防ぐ、単なる最適化に過ぎない。
- 165 名前:164 mailto:sage [2008/03/16(日) 18:17:49 ]
- すまん、reserveと勘違いした。
コンストラクタで指定した要素数は、ちゃんと要素が追加されるよな。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:21:25 ]
- v[20] = 1; とかで追加した気になってるかもしれないから
「追加」 の定義をきちんと聞いておいた方がいいぜ。
- 167 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:26:50 ]
- >>166
それは既存要素に対する代入だろ。sizeには反映されない。 下手したらコンテナの整合性を壊す。 て、>>166は言いたいんだと思う。
- 168 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:11:13 ]
- >>162
やりたいことをもっと明確に説明しないと回答のしようが無い。 たとえば12345という値を持つint型変数があったとして、どのような状態のchar配列が欲しいんだ?
- 169 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:32:59 ]
- >>162
int型をchar型の要素数4(とは限らんが)の配列として扱うの? それなら共用体になるが
- 170 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:45:07 ]
- ありがとうございます
共用体しらべてみます
- 171 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:19:59 ]
- >>170
エンディアンには気をつけてな どうせsprintfとかいうオチだとは思うが
- 172 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:21:29 ]
- www.imgup.org/iup575962.jpg.html
・・・VISUAL C++というソフトを使っていたら突然こうなりました OSはVISTAで、これ以降いくらプロジェクトを作成しようとも、どうやら自動生成されるファイルが欠落しているようです アンインストール、再インストールも試しましたが無駄でした、当然管理者権限もです。 どうすればいいでしょうか?
- 173 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:32:10 ]
- メッセージのファイルはあったか?あったらそれを直接クリックしてみな。
- 174 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:36:03 ]
- >>173
なかったです、正常動作している友人のプロジェクトフォルダを丸ごとZIPで送ってもらったら DEBUGフォルダがありましたが、自分のほうでは生成されなくなってました
- 175 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:38:59 ]
- ウイルス・・・じゃないよな?
今までは正常に実行できてたんだよな?
- 176 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:48:51 ]
- ないってことは、コンパイルされた結果のファイルが無いんだな。
リビルドして、出力ウインドウにエラーメッセージがないか確認するべし。 プロジェクトのプロパティーページのリンクの項の出力ファイルのパスを確認しよう。その友人のプロジェクトが絶対パスになってないか?
- 177 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:51:08 ]
- VC2005 って Vista に対応してたっけ?
- 178 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:08 ]
- Vista対応パッチがあるという話は聞いたゾ。俺Xpだからよくわかんね
- 179 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:50 ]
- >>176
// test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } これに int main(void) { return 0;} これを書き足してリビルドしたら 1>------ すべてのリビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>プロジェクト 'test'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>stdafx.cpp 1>test.cpp 1>コードを生成中... 1>マニフェストをリソースにコンパイルしています... 1>リンクしています... 1>LINK : 前回のインクリメンタル リンクで C:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。 1>LINK : warning LNK4067: エントリ ポイントがあいまいです。'mainCRTStartup' が選択されます。 1>マニフェストを埋め込んでいます... 1>ビルドログは "file://c:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\test\Debug\BuildLog.htm" に保存されました。 1>test - エラー 0、警告 1 ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ========== で、ぱっとみは何とかなったみたいです 再度printfをためしてみます 一旦ありです
- 180 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:01:22 ]
- えー
- 181 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:04:13 ]
- mainは一個でいいです。どちらか一方だけにしましょう。
- 182 名前:デフォルトの名無しさん [2008/03/17(月) 04:09:01 ]
- イテレータを循環に、ってできるのですか?
- 183 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:26:18 ]
- 演算子オーバーロードすればできるんじゃね?
- 184 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 07:29:05 ]
- 自分でイテレータを作れば。
- 185 名前:デフォルトの名無しさん [2008/03/17(月) 09:09:35 ]
- >>183-184
自分でイテレータってつくれるんですか? あと、演算子のオーバーロードでできるんでしょうか?
- 186 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:11:19 ]
- できるっていってるじゃない。
- 187 名前:デフォルトの名無しさん [2008/03/17(月) 10:44:58 ]
- >>186
もうちょっとだけ具体的に言ってみてよ。
- 188 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:54:37 ]
- >>187 何を?
- 189 名前:デフォルトの名無しさん [2008/03/17(月) 11:09:18 ]
- 独自イテレータのつ•く•り•か•た
- 190 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:13:53 ]
- 質問すればいいじゃん
- 191 名前:デフォルトの名無しさん [2008/03/17(月) 11:16:27 ]
- ググッたけどわかりませんでした。
- 192 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:33:44 ]
- class iterator {};
できあがり。 これ以上具体的な回答は、質問が具体的でない限りあり得ない。
- 193 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:03:46 ]
- ありえないのはオマエの禿頭
- 194 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:19:10 ]
- ムキになるなよw
- 195 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:27:01 ]
- ムケてるのはオマエの禿頭
- 196 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:41:30 ]
- ムケてないのか…
- 197 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:24:11 ]
- 包茎で無能じゃ救いようがないよ・・・
- 198 名前:デフォルトの名無しさん [2008/03/17(月) 14:39:59 ]
- 包茎で無能だけど禿げてはいないぞ(怒)
- 199 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:12:57 ]
- しまった……全部に当てはまる……。
- 200 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:35:27 ]
- 包茎で禿げてるから、無能と呼ばれないように頑張るわ……
- 201 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:56:53 ]
- 包茎で禿で不能です
- 202 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:45:45 ]
- operator==とかの引数の対称性って手動で保守するしかないんですか?
こういうやつ↓ bool operator==(const A& lhs, const B& rhs) {...} bool operator==(const B& lhs, const A& rhs) // これを自動化したい { return rhs == lhs; }
- 203 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:23 ]
- boost
- 204 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:26 ]
- >>202
Boost.Operatorsにまとめられている。 その例だと、Aがequality_comparable<A, B>を継承して、 operator==(const A& lhs, const B& rhs)を定義すれば、 operator==(const B& lhs, const A& rhs)とoperator !=が作られる。
- 205 名前:デフォルトの名無しさん [2008/03/17(月) 22:56:40 ]
- 大体の人はよく使う関数などをまとめた個人用ライブラリを作ってると思うのですが
どのように管理しているんでしょうか? * mylib/*.{h,c} と一つのディレクトリにヘッダとソース。 * mylib/include/*.h,mylib/src/*.c で mylib/lib/libmylib.a とか。 普通のライブラリ風に。 で使うときにはどうしてます? * mylib ごとコピーして? * mylib/include/ とかにパスを通してる。で -lmylib どうすると楽なのか悩んでます。
- 206 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:48 ]
- 不良債権が流行った頃
護送船団とか何とか叩いておいてアメリカがこの様なわけだが
- 207 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:54 ]
- >>205
コンパイラオプション (多分 -I) + makefile
- 208 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:44:55 ]
- クラスAがあり、クラスBがクラスAのインスタンスのポインタpを持っている形のプログラムがあります。
クラスAにはchar変数textがあり、クラスBからsprintf(p->text, "test");を実行します。 この時エラーが起きてプログラムが強制終了するのですが、何かおかしな手順を踏んでいるのでしょうか?
- 209 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:47:16 ]
- if文とfor文だけで一次元配列を大きい順にソートしたいんですけど
自分の力量では出来ませんでした。 やり方を教えてください。
- 210 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:50:39 ]
- >>208
クラス定義を貼れ
- 211 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:56:47 ]
- >>209
ソートでググれ。
- 212 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:08:51 ]
- >>210
クラス定義はしてあります。
- 213 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:11:05 ]
- ぬう。言葉が通じない
- 214 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:12:11 ]
- >>208
・pがAのインスタンスを指していない。 ・pが指しているAのインスタンスはすでに死んでいる。 ・A::textが5byteに満たない。 ・sprintfの前までに何かメモリを壊している。 ・その他 この中のどれなのか判定してやるから、ソースを貼れと言ってるの
- 215 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:15:58 ]
- 意味をはき違えました。
コードが非常に長いので今編集しています。
- 216 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:29:58 ]
- class Task
{ public: void Add(Task *obj, LPCSTR name);//インスタンスを登録する関数です。 Task* Find(char *name);//インスタンスのポインタを返す関数です。 void Do();//登録されたインスタンスのExec();を実行 protected: virtual void Exec(); } class Font : public Task { public: char text[10]; protected: void Exec(){ cout << text << endl; } } class Edit : public Task { public: Init(){ font=(Font*)Find("font"); } void setFont(){ sprintf(font->text, "text"); } private: Font *font; protected: void Exec(){ setFont(); } }
- 217 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:30:21 ]
- main()
{ Task task; task.Add(new Font(), "font"); task.Add(new Edit(), "edit"); while(true) task.Do(); } 色々大量に省きましたが大体こんな感じです。
- 218 名前:208 mailto:sage [2008/03/18(火) 00:33:47 ]
- すいません、自己解決しました。
- 219 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:37:07 ]
- EditのInit()はどこで呼ばれてんの
- 220 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:41:22 ]
- >>205
これ俺も気になる。なかなか話題にもならないし、ぐぐっても出てこないし、 みんなどうしてるって疑問は昔からあった 俺は mylib/include、mylib/source、mylb/lib にして、 include、lib にパスを通す派
- 221 名前:208 mailto:sage [2008/03/18(火) 00:45:27 ]
- >>219
Add内に実行する部分があるのでそこで実行されてます。 上のだと省いてます。 インスタンスの登録順序のせいでポインタが格納できていないのが問題でした。
- 222 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:51:13 ]
- >>220
コピーしたら元を変更したときにコピーした数だけ更新してまわらないといけないだろ。 ディレクトリ分けてパス指定するのが当然だから、話題にもならないんじゃない?
- 223 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:55:36 ]
- Visual C++で
FileInfo^ fi = gcnew FileInfo(filename); __int64 size = fi->Length; のように取得したファイルサイズを32bitに変換し、さらにリトルエンディアンに変換した後、 バイナリでファイルに書き出したいのですが、何か良い方法はありますか?
- 224 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:00:11 ]
- >>223
c++/cliは別スレで。
- 225 名前:208 mailto:sage [2008/03/18(火) 01:01:47 ]
- 文字列代入でつまりました。
LPTSTR text; _stprintf(text, "text"); これでエラーが起こるのですが、正しくはどうすればいいのでしょうか?
- 226 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:02:01 ]
- >209
とりあえず速度とか、プログラムらしさというのを全く気にしなくて良いなら(勉強の一貫なら) 一度、数字の書いたカードを手作業で並べ替えてみるといいかもしれない。 そのときの手順を1つ1つメモしていくんだ。
- 227 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:09 ]
- >>225
text はどこを指しているのか。
- 228 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:26 ]
- >>223
VC++なら、x86だから元々リトルエンディアンですが。 つーか、下位バイトから順番に出力すればいいのでは?
- 229 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:07:32 ]
- >>226
やってみます・・・
- 230 名前:208 mailto:sage [2008/03/18(火) 01:08:08 ]
- >>227
ありがとうございました。 TCHAR関係すべて勘違いしていました。
- 231 名前:202 mailto:sage [2008/03/18(火) 01:30:50 ]
- >>203,204
レスthx いろいろなoperatorを定義する時に便利そうですね。 でも、operator==だけを見ると、あまり便利に感じないです。 // Hoge.cpp #include "A.h" #include "B.h" bool operator==(const A& lhs, const B& rhs) {...} というのを考えていたので、Aに修正を加えないといけないのがちょっと・・(Bはそのままというのも気になる)。 普通に定義することにします。
- 232 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:07:56 ]
- 209です。ググったりしたのですが難しいです。
よろしければ手直ししていただけませんか。Visual C++ 6.0です。 int hairetu(int jun[N]){ int max,j,k,retu[N],jun2[N]; for(j=0;j<N;j++){ jun2[j]=jun[j]; } for(k=0;k<N;k++){ for(j=0;j<N;j++){ if(max<jun[j]) max=jun[j]; jun[j]=jun2[k]; } retu[k]=max; max=retu[k]; } for(j=0;j<N;j++){ jun[j]=retu[j]; } return(jun[N]); }
- 233 名前:デフォルトの名無しさん [2008/03/18(火) 02:12:58 ]
- 開発環境はVS6、コードはANSIです。
_msize()ってmalloc()やrealloc()などで 指定したメモリサイズを返すと思ってましたが、 つなげるランタイムライブラリによって変わるのですか? 現状でコンパイルオプション「コード生成」の「使用するランタイムライブラリ」を 「シングルスレッド(デバッグ)」にすると指定したサイズ、 「シングルスレッド」にすると指定したサイズから直近の16の倍数値が返ってきます。 これってC言語をする人にとって知ってて当たり前のことなんですか? それともオプションで調整できることなんですか?
- 234 名前:205 [2008/03/18(火) 02:17:24 ]
- >>207,220
やっぱりそういう感じになるんですかね。 >>222 そう思ったんですけど頻繁に mylib は更新されて少し前に書いたものが コンパイル通らなくなったりして結局使ってる側を修正しないといけなかったりで… どうするといい感じに管理できるのかなぁと。
- 235 名前:208 mailto:sage [2008/03/18(火) 02:17:32 ]
- >>232
バブルソートでググってみ。 選択ソート、挿入ソートでもOK。 それでダメなら、並び変えるときに自分がどういう手順を追っているか考えてみ。 10 8 3 5 7 1 6 2 4 9 ↓ 1 2 3 4 5 6 7 8 9 10 1つずつ動かして、その手順を元にコード起こす。
- 236 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:19:42 ]
- >>232
とりあえず要素5つくらいの配列を考えて、そのプログラムを動かすと配列の要素がどう変わっていくかを 紙の上で1ステップずつ書き出してみな。 ・勉強したアルゴリズムの通りに並んでいかないなら、プログラムのロジックが間違っている。 ・ググって調べたアルゴリズムがまだ理解できていないなら、まずはそれを理解するとこ。 アルゴリズムの説明が欲しいなら、どこか適切なスレへ。 ・自分で書いたプログラムがどういう動作になるのかを追えないなら、勉強不足。 C言語の仕様的に分からないことがあるなら、また質問してみれば?
- 237 名前:デフォルトの名無しさん [2008/03/18(火) 02:24:24 ]
- >>232
qsort()じゃだめなんですか? 勉強の為にソートロジック作るなら クイックソートやマージソートやバブルソートなどで検索すればコードがでてくると思いますよ。 参考までに一番単純なバブルソートの例を void bubble_sort(int a[], int n) { int i, j, t; for (i=0; i<n-1; i++) { for (j=n-1; j>i; j--) { if (a[j-1] > a[j]) { t = a[j]; a[j] = a[j-1]; a[j-1] = t; } } } }
- 238 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:27:32 ]
- >>233
_msize()ってANSIじゃないでしょ。
- 239 名前:デフォルトの名無しさん [2008/03/18(火) 02:30:14 ]
- >>238
う・・・だったみたいですね。 Win32APIやMFCでなくコンソールアプリケーションで作成に訂正です。
- 240 名前:233 [2008/03/18(火) 02:33:14 ]
- long lGetSize = 0;
char *pcDat = NULL; pcDat = realloc(NULL, 1); lGetSize = _msize(pcDat); printf("1 = %ld\n", lGetSize); → シングルスレッド(デバッグ)での結果=1 → シングルスレッドでの結果=16 pcDat = realloc(NULL, 13); lGetSize = _msize(pcDat); free(pcDat); printf("13 = %ld\n", lGetSize); → シングルスレッド(デバッグ)での結果=13 → シングルスレッドでの結果=16 pcDat = realloc(NULL, 17); lGetSize = _msize(pcDat); free(pcDat); printf("17 = %ld\n", lGetSize); → シングルスレッド(デバッグ)での結果=17 → シングルスレッドでの結果=32 って具合です。
- 241 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:34:05 ]
- >>235-237
ありがとうございます。 qsortも使い方が分からないのでとにかくif文とfor文でやることにしていました。 >>237さんのバブルソートの例を見ながら組み上げたいと思います。
- 242 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:40:20 ]
- >>240
_msizeの動作は詳しく無いから想像だけど…。 リリース版では効率化のために1とか13とか中途半端なバイト数で確保せずに、16バイト単位で領域の割り当てをするけど デバッグ版ではデバッグしやすいように指定したバイト丁度を割り当てているのでは? (実際には管理領域やメモリ破壊検知などのためにもっと余分に割り当てているだろうけど。)
- 243 名前:233 [2008/03/18(火) 02:52:02 ]
- >>242
確かにこの現象が判明したのはリリースでのコンパイルですが、 デバッグで「使用するランタイムライブラリ」を「シングルスレッド」に変えるだけでも同じ現象になるのです。 これはもうランタイムライブラリの仕様としか言いようがないのでしょうか? 同じコードなのに違う動作をするというのはどうも納得いかないのです。 (オプション変更によってコンパイルorリンクエラーになるならまだわかりますが・・・) これがC言語をする人にとって周知の事なら自分の知識不足として納得しようかと思い書き込みましたw
- 244 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:07:25 ]
- >>243
MSDNによれば >ヒープに割り当てられたメモリ ブロックのサイズを返します。 と書いてある。 あくまで「割り当てられたサイズ」であり、これは「要求したサイズ」とは必ずしも一致しない。 >同じコードなのに違う動作をするというのはどうも納得いかないのです。 ランタイムライブラリに依存する処理なのだから、リンクするランタイムライブラリが異なれば 結果が異なることは特に不自然ではないと思う。 >これがC言語をする人にとって周知の事なら自分の知識不足として納得しようかと思い書き込みましたw すでに出ていることだけど _msizeはANSIの標準ではなく MS固有のAPIでしかないのだから、 C言語をする人にとって周知の事というわけではない。
- 245 名前:233 [2008/03/18(火) 03:20:59 ]
- >>244
言ってることはわかるのですが、 それならデバッグ用のランタイムの動作はデバッグなしのランタイムとあわせるべきじゃないかと思いますね。 例えば、デバッグでステップ実行で確認したのにデバッグ外すと動作変わるなら、デバッグの意味ないですよね。 とりあえず周知でないこととオプションで対応できるようなことでないのはわかりました。
- 246 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:35:54 ]
- >>245
つ msdn2.microsoft.com/ja-jp/library/974tc9t1(VS.80).aspx
- 247 名前:デフォルトの名無しさん [2008/03/18(火) 06:05:02 ]
- 下のプログラムは
ファイル名を入力させて 検索文字列を入力して 「該当ファイルの検索文字列を含む行を全て表示するプログラム」です しかしながら実行すると下のコードの getlineがすっとばされてしまい こちらから検索文字列の入力を行うことができません なぜですか?
- 248 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:05:33 ]
- #include <iostream>
#include <string> #include <vector> #include <fstream> using namespace std; int main() { string s; vector<string> v; cout << "Input filename" << "\n"; cin >> s; ifstream in(s.c_str()); while(getline(in,s)) v.push_back(s); cout << "検索文字列"; //↓の入力がすっとばされてしまう getline(cin,s); for(vector<string>::size_type i = 0;i < v.size();i++){ if(v[i].find(s) != string::npos) cout << i << ":" << v[i] << "\n"; } return 0; }
- 249 名前:247 mailto:sage [2008/03/18(火) 06:12:54 ]
- 環境はcygwinを使っています
- 250 名前:sage [2008/03/18(火) 06:49:59 ]
- getlineの定義は
istream &getline( char *バッファ, streamsize 文字数 ); istream &getline( char *バッファ, streamsize 文字数, char 境界文字 ); ですよね cin.getline(s,MAXSIZE) にしたらだめでしょうか
- 251 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:55:30 ]
- ファイル名で入力した際に入ってきた改行文字が残っているんではないですか
getline(cin,s) の前に cin.ignore(); で一文字削ってみては
- 252 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:31:29 ]
- >>244の補足になるけど、malloc/calloc/reallocも
標準では、指定された大きさ「以上」のメモリを確保するとなっていて、 ぴったりちょうどの大きさを割り当てなければならないという決まりはない。
- 253 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:48:32 ]
- >>245
そもそも_msize()==(要求サイズ)という条件に依存しようとすることが間違い。 >>244にあるとおり、この条件が常に成立するなどとは、MSは言っていないはず。 処理系依存ってやつ。
- 254 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:20:07 ]
- >>245
> 例えば、デバッグでステップ実行で確認したのにデバッグ外す > と動作変わるなら、デバッグの意味ないですよね。 デバッグビルドでデバッグし易いようにコードが変わるのは、よくある こと。デバッグビルドとリリースビルドで動作に違いがないなら、デバッ グビルドの意味ないじゃん。
- 255 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 11:58:02 ]
- デバッグビルドだとちゃんと動くけどリリースビルドにすると落ちるとか言うのはよくあるよな。
たいていは初期化不足だけど。
- 256 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 14:35:41 ]
- >デバッグの意味ないですよね
あるよ。 デバッグビルドとリリースビルドの違いで困るプログラムは、 まずいプログラムだから、それを自覚することが出来る。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:33:21 ]
- C言語とか意味わかんね
柴田望洋ってどうなの?
- 258 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:50:42 ]
- 柴田望洋についての話に進める前にC言語を意味分かるようにする事の方が先決というか
それを先にやらないと柴田望洋について話しても何も分からないと思うというか C言語すら分からないようじゃ柴田望洋についての話も分からんだろうというか それ以前に柴田望洋の話はマ板でやれ。
- 259 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:54:45 ]
- 1:#include <iostream>
2:#include <string> 3: 4://using namespace std; 4: 6:class Foo { 7:private: 8: std::string s; 9: 10:public: 11: string getValue ( void ) { return s; }; 12: void setValue ( const string s_in ) { s = s_in; }; 13:}; 14: 15:int main ( void ) { 16: Foo f; 17: f.setValue("abcd"); 18: std::cout << f.getValue() << std::endl; 19: return (0); 20:} これをコンパイルすると、次のメッセージが出てコンパイルエラーになってしまいます。 "foo2.cpp", 行 11: エラー: 型の名前が予期される位置に "string" があります. 4行目のusingステートメントを有効にするとコンパイルできます。 何が間違ってるのでしょうか? Cは経験あるのですが、C++はド素人で良く分かりません(T_T
|

|