1 名前:デフォルトの名無しさん [2008/08/06(水) 20:56:17 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.57【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1216215558/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
91 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:34:15 ] Code::Blocks(MinGWつき)とwxWidgetsをWindows XPにインストールした後、 「壮大な一歩を踏み出すぞ〜」と意気込んで、とりあえずwxWidgetsプロジェクトではなく 以下のコードをビルド、出来上がったexeをコマンドプロンプトにて実行しました。 #include <iostream> using namespace std; int main() { cout << "こんにちわ世界" << endl; } 日本語は文字化けしてしまったので、プロンプトのフォントをMSゴシックに変えたんですが それでも駄目で、壮大な一歩を踏み外してしまいました。 Unicodeがらみの文字化けというところまでは分かるのですが、解決策が分かりません。 Code::Blocks WikiのWxWindowsQuickRefに書かれているBuild wxWidgetsはすでに終えたのですが、 まだwxWidgetsを使う所まで行ってないので、関係ないだろうし。 Code::BlocksとwxWidgetsでC++を始めようと考えていたのですが、かなり道は険しいようです……。
92 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:41:13 ] >>91 ソースコードの文字コードを変えてみては?
93 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:43:18 ] なんでもいいけど、int main なら値返そうよ。 2歩目も怪しい。
94 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:00:03 ] >>93 C++ならmainでreturnしないとreturn 0:したことになるって規則があって問題ない。 省略していいかどうかはまた別問題。
95 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:02:54 ] UNICODEで文字列を表示したいのか 単に日本語を表示したいのか
96 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:23:39 ] >>91 g++なら--input-charset=cp932 --exec-charset=cp932でどう? Code::Blocksでどう設定するかは知らないけど。
97 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:00:10 ] ソースをUTF-8か何かで書いてるのかな
98 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 05:48:46 ] これって問題あるでしょうか? struct hoge { int x; }; hoge *ptr; hoge &ref = *ptr; ptr = new hoge; //参照を作った後に確保 ref.x = 1; //参照からアクセス
99 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 06:09:09 ] 問題なし
100 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:14:01 ] >>98 問題あり
101 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:23:27 ] 問題あり。 refの指している先はnewされたところではない。
102 名前:デフォルトの名無しさん [2008/08/10(日) 08:32:10 ] 動かしてないけど hoge &ref = *ptr; のところで落ちるんじゃない? ptrは無効なポインタだからね、この時点で。
103 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:43:02 ] そもそもなんでnewしたいんだ? そこから見直すべきだな。
104 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:44:01 ] >>102 試して落ちたの? 中身へのアクセスは無いからそこじゃ落ちないと思うけど。俺は試してないw
105 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:49:34 ] 遅れてすみません >>80 それはまずいですかね? 別の名前に変えてみます >>81 言葉が足りませんでした、すみません まさにその通りです
106 名前:デフォルトの名無しさん [2008/08/10(日) 08:52:57 ] >>104 そうかもね 「動かしてない」って書いたジャン・・
107 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 09:05:21 ] 規格的に、どこを指してるかわからないポインタに"*"を適用した時点で、鼻から悪魔が出るかもしれない、はず。 実装的にも、大抵は「どこを指してるかわからないポインタ変数の指すアドレス」をコピーして別の変数に保持するだけだろうから HDDをフォーマットしてスパムメールを送りまくってももおかしくない、はず。
108 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 09:56:02 ] >HDDをフォーマットしてスパムメールを送りまくってももおかしくない、はず。 おかしいと思います。文章が。
109 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 11:53:58 ] いいもも〜
110 名前:デフォルトの名無しさん [2008/08/10(日) 11:57:43 ] >>109 中学生の太もも?? いいももだよねーーー ハァハァハァハァハァハァハァ
111 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 12:46:00 ] mapに関する質問です。以下のようなプログラムをビルドした際に、 (1)または(2)のように記述するとエラーとなりました。 error C2662: 'MYTYPE::hoge' : 'const MYTYPE' から'MYTYPE &' へ 'this' ポインタを変換できません なぜ(1)(2)だと失敗するのか、(3)だと成功するのか教えていただけないでしょうか。 ※環境 WindowsVista, Visual C++ 2008 Express map<string, vector<MYTYPE> > mapA; for(map<string, vector<MYTYPE> >::const_iterator it = mapA.begin(); it != mapPitcher.end(); ++it) { // イテレータを用いた方法 for(vector<MYTYPE>::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++itv) { it2->hoge(); // (1)コンパイルエラー } // イテレータを用いない方法 for(vector<MYTYPE>::size_type size = 0; size != it->second.size(); ++size) { it->second[size].hoge(); // (2)コンパイルエラー mapA[it->first][size].hoge(); // (3)成功 } }
112 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 12:57:20 ] >>111 MYTYPE::hogeがconstでないから、const MYTYPEに対してhogeを呼べない。 試しに↓やってみ。 const MYTYPE x; x.hoge(); ↓のようにhogeにconstを付ければok。 struct MYTYPE { void hoge() const; }; void MYTYPE::hoge() const { ... }
113 名前:111 mailto:sage [2008/08/10(日) 13:36:10 ] >>112 ありがとうございます。関数にconstをつけることで(1)(2)ともにコンパイルに成功することができました。ただ、 >const MYTYPE x; のように、変数宣言の時にconstをつけた場合に >void hoge() cosnt; とすればよいと自分なりに解釈したのですが、変数宣言は上で書いたとおり map<string, vector<MYTYPE> > mapA; とMYTYPEにconstをつけていません。どこでconstがついたのか教えていただけないでしょうか。 たびたびで申し訳ありませんが、よろしくお願いします。
114 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 13:46:47 ] const_iteratorだからじゃね
115 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:25:37 ] >>113 >どこでconstがついたのか 根本的に勘違いしてる。オブジェクトがconstかどうかと、 メンバ関数のconst指定は、まったく無関係ではないが 基本的に別物
116 名前:111 mailto:sage [2008/08/10(日) 14:27:47 ] >>114 const_iterator → iterator とすると、エラーになりませんでした。 イテレータについてまだ理解していないので、勉強したいと思います。 ありがとうございました。
117 名前:111 mailto:sage [2008/08/10(日) 14:34:27 ] >>115 >>113 の解釈は間違っているということですね。 オブジェクトのconstとメンバ関数のconst指定について調べていきたいと思います。 ご指摘、ありがとうございます。
118 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:40:31 ] わざわざconst_iteratorを使ってるからには、constになることくらいわかってるんだと思ってた 世の中難しいものだ
119 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:44:38 ] >>118 イテレータについての理解があまりなく、参考書丸写ししてました。
120 名前:デフォルトの名無しさん [2008/08/10(日) 17:12:14 ] C言語の標準ライブラリ関数qsortについての質問です この関数はメモリ上で連続していない配列に対しても動作は保証されているんでしょうか?
121 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 17:16:50 ] >>120 各要素は連続している必要があります。
122 名前:120 mailto:sage [2008/08/10(日) 17:27:06 ] >>121 そうでしたか。 回答ありがとうございました。
123 名前:120 mailto:sage [2008/08/10(日) 17:32:00 ] よく考えたら連続していない配列って・・・。 お恥ずかしい限りです。
124 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:07:36 ] ttp://www.rupan.net/uploader/download/1218362175.cpp ttp://www.rupan.net/uploader/download/1218362441.h ttp://www.rupan.net/uploader/download/1218362315.cpp 上から、main.cpp,sample.h,sample.cpp です。すべて同じディレクトリに配置されています。 staticメンバ変数についての質問なのですが、上のファイルのように ヘダファイル内のクラスでstatic変数dataを宣言し、同名cppファイル内で定義しようとすると、 main.cppで「Error: 外部シンボル 'Sample::data' が未解決」と出てしまいます。 int Sample::data = 0; の記述をヘッダファイル内に移動させればコンパイル通りますが、 解説しているサイトなどを見る限り、これは良くない書き方のような気がします。 どこに問題があるのか、ご教授ください。
125 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:11:02 ] 少しスレ違いかもしれませんが、VC++で作った実行ファイルについての質問です。 リリースビルドした実行ファイルを覗くと、pdbファイルへのパスがそのまま残っているのですが、 これは他の数、例えば0x00等で塗りつぶしてしまってもいいのでしょうか? 問題なく動いているように見えますが、異常終了した際になにか不具合がでたりしませんか?
126 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:12:35 ] >124 失礼しました、コンパイラはBorland C++ 5.5.1です。
127 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:25:40 ] >>124 >>126 BCCなら、多分Makefileの問題じゃないかね? コンパイルするときに分割コンパイルするオプション付いてる? -oか何かだと思うけど。
128 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:27:39 ] ごめん。大嘘コイた。 多分-c
129 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 19:38:36 ] >127-128 ありがとうございます!ご指摘のとおりでした。
130 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 20:31:47 ] >>125 そんな面倒なことしなくてもコンパイラオプションで消せる。
131 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:29:52 ] >>130 ありがとうございます。 なんでデフォでリリースビルドにデバッグ情報埋め込んでるのやら……
132 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:35:02 ] 以下のようにvoid*型にポインタを変換したとき、 delete時にデストラクタが呼ばれるでしょうか? class test { int *p; public: test(){ p = new int(); } ~test(){ delete p; } }; int main() { void *ptr = (void*)(new test()); delete ptr; return 0; }
133 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:41:28 ] >>132 鼻から悪魔。
134 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:42:01 ] _
135 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:49:05 ] >>132 delete p; の上にprintfを入れて試してみては?
136 名前:132 mailto:sage [2008/08/10(日) 21:58:43 ] >>135 試してみた。呼ばれないみたいだね。
137 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:13:19 ] そりゃvoid*で型情報消してるし
138 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:15:03 ] じゃあどうしてvoid*型の変数をdelete/delete[]しようとするとエラーが出るようにはならないんですか? new void;とかできませんよね?なぜ?どうして?
139 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:20:42 ] >>131 リリース版でもデバッグできるって結構便利だと俺は思う。 >>138 エラーにしたいという要望だけはboost::checked_delete使えば叶う。 あと、boost::shared_ptr<void>だとデストラクタが呼ばれるというマジックもある。
140 名前:135 mailto:sage [2008/08/10(日) 22:28:54 ] >>138 gccならwarning deleting void* is undefinedって警告がでた。
141 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 23:59:16 ] >>73 なんだけど gccで構造体を = {0} して初期化すると、「最初以外の、他の中身の初期化子(?)がない」っていう警告が出るんだけど、 これは無視してもいいの?
142 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 00:01:16 ] それ構造体か?構造体の配列とかでやってないか?
143 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 00:15:36 ] 構造体です。例えば具体的に言うと、struct tm(mktimeとかで使う、time_tを要素毎に分けた奴)で、 struct tm a = {0}; ってすると、 *.cpp:36: warning: missing initializer for member `tm::tm_min' *.cpp:36: warning: missing initializer for member `tm::tm_hour' *.cpp:36: warning: missing initializer for member `tm::tm_mday' *.cpp:36: warning: missing initializer for member `tm::tm_mon' *.cpp:36: warning: missing initializer for member `tm::tm_year' *.cpp:36: warning: missing initializer for member `tm::tm_wday' *.cpp:36: warning: missing initializer for member `tm::tm_yday' *.cpp:36: warning: missing initializer for member `tm::tm_isdst' って出ます。(最初のtm::tm_secだけ警告が出ない) コンパイル時の設定は -Wall -W ってやってるんだけど、問題ないんだったら、これだけ警告でないようにできないかな…
144 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 00:32:29 ] なら struct tm a = {0, 0, 0, 0, 0, 0, 0, 0, 0}; にすると出なくなるような気がしないでもない。
145 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:02:02 ] テンプレートの引数にoffsetofを使いたいのですが、 offsetに使用するパラメータがprivate内にあると エラーがでてしまいます。 なんとかメンバをprivateにしたいのですが、 手は無いでしょうか。 template <int T> class test { }; class Hoge1 { friend test<offsetof(Hoge1, Hoge1::a)>; public: private: int a; }; 以下の様にするとエラー無し。 template <int T> class test { }; class Hoge1 { public: int a; }; test<offsetof(Hoge1, Hoge1::a)>; よろしくお願いいたします
146 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:09:31 ] >>145 そもそもクラス(非PODか?)では、変数が宣言順に配置されるという保証がなかったと思う。 危険コードかもよ。
147 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:15:39 ] >>146 こらこら クラスは変数が宣言順に配置されるぞ メンバ関数だけは別扱いだけど メンバ関数ポインタも宣言順に配置される
148 名前:デフォルトの名無しさん [2008/08/11(月) 10:20:49 ] >>145 そのコードの目的が分からん offsetofを使わずに済むコードを考えた方がいいんじゃない 見てていらつくコードなんだけど
149 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:23:11 ] C++でクラス内でoffsetofを使うのは大抵委譲を使う場合だな
150 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:35:42 ] else if{ } と else{ if{ } } とで内部的に違いありますか? 見た目的にネストは浅くした方がいいのかな?
151 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:36:40 ] >>150 前者はelseの後に複文が書けない 後者は複文が書ける それ以外は同じ
152 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:40:10 ] >>147 非PODだと「変数が宣言順に配置されるという保証がない」ではなくて、 「offsetofマクロが正常動作する保証がない」だった。 (自分は規格を読んでないから↓の受け売りだけど) ttp://www.kijineko.co.jp/tech/cppemb/alignment.html まあ145のコード通りならPODだから問題なさそうだけど、 いつPODでなくなるか分からないから怖いな。
153 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 10:43:23 ] >>151 d!
154 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:01:01 ] >>147 一般論? なら順序が保証されるのはアクセス指定子が間に挟まらない場合だけだった気がする。
155 名前:152 mailto:sage [2008/08/11(月) 14:09:51 ] >>154 あ、そうだ。それを聞いたことがある。
156 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 17:40:19 ] 昔、sunかどっかのCコンパイラのstructのメンバの順番が ソースの上下と逆だった覚えがある。 それ以来構造体のメンバの順番に依存したコードは書かなく なったので、構造体が拡張されたC++ではどうなのか気にした こともないやw
157 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 17:43:39 ] トラウマというやつですね
158 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:29:46 ] 仮に配置が宣言順にならない場合も、初期化子の実行順は保証されますか?
159 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:32:15 ] >>158 されます 宣言順です 並べた初期化子の順ではありません
160 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:44:05 ] C言語検定の1級をもってるとゲームプログラマーとして就職するときどのくらい有利ですか?
161 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:45:56 ] 宣言順にならないとき、Cスタイルの初期化はプログラマの意図した通りになる? struct hoge { int a; int b; }; hoge h = {1,2};//h.a==1,h.b==2
162 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:46:48 ] >>160 それでやっと最低限。しかも資格持っていないC言語分かってる 連中とまったく対等くらい
163 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:48:41 ] こころなしか足しになる程度であんまり意味は無いんじゃないかと あの程度は研修で叩き込まれたらすぐ身に付くレベル 他の要素のほうが重要視されるだろう
164 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:52:45 ] なるほど、じゃあ線形代数ができる等 のほうが強みになるってことですか。 スレ違いの質問に答えていただきありがとうございました。
165 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:01:41 ] >>164 ゲームプログラマーとして(大手に)就職したいなら、普通に 大卒か院卒で、趣味でゲーム一本でも作っておけ。 チームで作ってメインプログラマ兼取りまとめ役とか だとポイント高いよ。
166 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:41:38 ] -> これはどういう意味ですか? こんな感じで使われているようです。 node->setMaterialFlag(EMF_LIGHTING, true); また何と呼ばれてますか? ->でgoogleで検索かけてもかからないので困ってます。
167 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:44:37 ] >>166 アロー演算子 (*node).setMaterialFlag(EMF_LIGHTING, true) の書き方が違うだけ
168 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:45:51 ] あるクラスの実体である、node変数のsetMaterialFlag()メンバ関数を呼び出している class CHoge { setMaterialFlag(XXX, bool){} };
169 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:50:21 ] >>167-168 わかりました。 即レスしていただきありがとうございました。
170 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:01:33 ] なんでメンバのアクセスって.と->に分けてるんだろう。 どちらかに統一すると困るケースが思いつかないのですが、 何か理由があるのでしょうか?
171 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:05:54 ] >>170 *(p + i)で事が足りるのにp[i]と書けるのと同じ理由で、 (* p).mで事が足りるけれどもp->mと書けるようにしてある。
172 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:19:40 ] タイプを楽にするためですよ
173 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:42:22 ] そういうのって糖衣構文と言うのだったかな?
174 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:51:12 ] いや、ポインタでも実体でもどちらも.か->に統一してくれたほうが ジェネリックプログラムで楽で、メリットがあるのではと思ったんですよ。 そういうメリットを捨てて*や->を使わせてるのは、 ポインタからメンバにアクセスするのに*をつかわないで直接 ptr.mで良いようにしてしまうと、言語仕様として何か不都合が あるからなのかなと、疑問に思ったわけで。
175 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:10:08 ] なんか数ヶ月前にも似たような話題があった。
176 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:21:39 ] ptrptr-->m
177 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 02:38:00 ] 歴史的経緯は知らんが状態を持つイテレータを使うので . と->の両方が無いと困る。
178 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 08:35:01 ] Cのころからそうだったのを受け継いでいるのはおいといて、 C++では「.」はオーバーロードできない(させない)という差がある。 ->はオーバーロードできる。いろんな都合で現状のルールに落ち 着いてるようだ。
179 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 09:23:53 ] Dだとどっちも . でいけるって話なかったっけ?
180 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 10:05:56 ] gccで特定のファイルというか場所というかインクルードしたファイルに対してだけ警告がでないようにはできますか? 使っている環境のgccで警告を厳しくすると、stlに対して大量の警告がでてしまうので、うっとおしいんです スクロールしないと見たい警告みれないですし 自分でstl側をいじれる環境ではないです
181 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 13:55:55 ] 配列とポインタで A *a=new A[100]; A b[10][10]; とした時に &((((*A)[10])a)[i][j]) - a == &(b[i][j]) - b これって常に成り立ちますか?
182 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 14:08:37 ] >>181 要するに要素数10の配列へのポインタへ強引にキャストして 成り立つかというわけでしょ。 そりゃ成り立つわ。
183 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:00:44 ] サン・クスコ
184 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:13:38 ] どういたしマチュピチュ
185 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:46:23 ] マンコ=カパックがどうしたの?
186 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 03:51:24 ] 今知ったんだけど、newって失敗したらNULLを返すと思ってたけど違うのね ずっと p=new int [1000]; if(p==NULL){〜 みたいな意味ないことしてた…
187 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 05:04:55 ] nothrow
188 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 06:14:13 ] パスの後ろに '\\' が無い場合は追加する関数を作ったんですが, "像\\" とかだとさらに追加されて "像\\\\" になってしまいます. 正確にやるには先頭から調べるか, wstring に変換するしかないでしょうか? std::string& AddBackslashIfNotExist1(std::string* ptrPath) { std::string& strPath = *ptrPath; if( strPath.empty() ) return strPath; if( strPath[ strPath.size()-1 ] != '\\' ) return strPath += '\\'; if( strPath.size() > 1 ) { if( _ismbblead( strPath[ strPath.size()-2 ] ) ) return strPath += '\\'; } return strPath; }
189 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 06:19:58 ] 要するにSJISの2バイト目が\の文字の対策ってことだよね? 先頭から見て行くか別の文字コードにするしか手は無いよ。
190 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 06:49:20 ] >>188 SJISの1バイト目領域⊂2バイト目領域だから、これはいかんともしがたい。
191 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 07:54:46 ] >>188 律儀に先頭から見る必要は必ずしもないけれど、1バイトずつ遡る関数を作ったところで効率はさほどよくならないね。