- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 338 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:08:51 ]
- 用途としては>>49みたいな場合に。
- 339 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:21:50 ]
- test
- 340 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:28:40 ]
- 十進数の入力を二進数表示するコードを書いてみたんですが、
最初MASKを0x01に設定して1とか255とか入力したら桁が上下逆になりました。 0x80000000に設定して頭からチェックさせてやったらうまくいったんですが、 intel系のプロセッサはリトルエンディアンだからビットを上下逆に扱うんじゃないんですか? /* d2b.c */ #include <stdio.h> #define MASK 0x80000000 int main(void) { unsigned int x; int n; scanf("%d", &x); for(n = 0; n < 32; n++){ if( ((x << n) & MASK) == 0) putchar('0'); else putchar('1'); if( (n+1) % 4 == 0) putchar(' '); } return(0); }
- 341 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:34:58 ]
- >>340
×ビットを上下逆 ○バイトの並びが逆
- 342 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:35:39 ]
- エンディアン関係ナス
- 343 名前:340 mailto:sage [2008/02/10(日) 22:37:25 ]
- >>341
バイト単位で逆なんですね。 >>342 あ、全然関係ないんですか; ありがとうございましたm(__)m
- 344 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:18:02 ]
- stdio.hのremove関数の使い方は下記で問題ないでしょうか?
remove("ファイルのパス"); 今現在、例えば remove("D:\\test\\test.txt"); こんな具合の1文だけを試しても成功しません、-1が返ってきて失敗しているようです パスは絶対パスで問題ないと思いますし、testフォルダとtest.txtは試しに作ってみたものです プログラム中で開いてもいませんし読み取り専用でもありません 見当がつかず困っています、何かご存知の方いたらよろしくお願いします
- 345 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:21:13 ]
- >>344 perror() してみれ
- 346 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:22:15 ]
- >>344
そのパスと同じままfopenして開けるのか? つまりほんとにそのファイルをプログラムから認識できているのかをチェキラ! あと、strerrorでエラー内容を取得してみては?
- 347 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:23:36 ]
- test.txt.txtだったりして・・・ いやさすがにそれはないか
- 348 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:26:52 ]
- Dドライブは実はDVD-ROMドライブだったりして・・・いやさすがにそれはないか
- 349 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:30:58 ]
- そもそもDドライブが存在しな・・・ないか ないよな
- 350 名前:344 mailto:sage [2008/02/10(日) 23:32:54 ]
- permission deniedというエラーが・・
ファイルのプロパティは読み取り専用とか隠しファイルとかチェック入っていないんですが 全く違う部分なんでしょうか?
- 351 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:33:25 ]
- chmod a+w FILENAME
- 352 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:35:53 ]
- Dドライブがネットワークドライブ・・
のわけないよな
- 353 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:36:33 ]
- >>351
ahodesuka?
- 354 名前:344 mailto:sage [2008/02/10(日) 23:36:53 ]
- >>351
うわぁ・・そういうの必要なんですか・・ Cじゃ書けないですよね? Dはあります
- 355 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:37:30 ]
- ^^;
- 356 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:37:45 ]
- WindowsXP と仮定して
1.コマンドプロンプトを開く [スタートメニュー]-[ファイル名を指定して実行] cmd 2.コマンドプロンプトで下記の三つのコマンドを打つ D: cd \test dir これで test.txt があるかどうか確認する
- 357 名前:デフォルトの名無しさん [2008/02/10(日) 23:38:17 ]
- >>351
それはUNIXだろ。 DOSとWindowsは rd /s/q c:\ だろ。
- 358 名前:344 mailto:sage [2008/02/10(日) 23:39:44 ]
- ファイル自体はあります
今ファイルのパスを変数に入れて、開いて中の文を出力させたりしてみました その変数をそのまま使っています それとfcloseもしっかり
- 359 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:39:53 ]
- >>357
そうだったな
- 360 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:45:39 ]
- >>358
っ attrib d:\test\test.txt
- 361 名前:344 [2008/02/10(日) 23:52:26 ]
- >>360
そういう方法以外のコード内に記述して済ませる方法って言うとWin32APIってのを使うしかないんでしょうか
- 362 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:56:03 ]
- >>360
その前に permission denied ってんだから削除する権利があるのかどうか確認しろよ。 コマンドプロンプトから del してみるとか、エクスプローラから削除してみるとか。
- 363 名前:344 mailto:sage [2008/02/11(月) 00:08:29 ]
- >>362
そこら辺は出来ます、管理者権限でログインしてるので間違いないはずです
- 364 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:12:57 ]
- >>363
実際消してみた?他のソフトがロックしてるってことはない?
- 365 名前:344 mailto:sage [2008/02/11(月) 00:14:34 ]
- 消してみました、remove関数を試す為に作ったファイルなのでそういったことはないと思います
- 366 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:19:03 ]
- そのプログラム内でopenしてる状態でremoveしようとしてる、とかいうオチじゃないよね。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:23:02 ]
- 同じこと何度も確認されまくっててかわいそす
- 368 名前:344 mailto:sage [2008/02/11(月) 00:23:53 ]
- >>366
上で言ったとおり、remove関数を使う最低限の文だけで実行してもエラーはでますし closeもしています
- 369 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:26:22 ]
- もうみんな思い当たる節が尽きたんだろ・・・
- 370 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:29:05 ]
- プログラムを管理者権限で実行してないとか。
- 371 名前:344 mailto:sage [2008/02/11(月) 00:29:09 ]
- 絶対パス指定出来ない訳ないですよね・・・なんでだろう
- 372 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:29:59 ]
- あとは、ディレクトリ消そうとしてるとかぐらいかな。
ファイルを開いて中の文を出力させたりしてると言うから多分違うだろうが...。
- 373 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:30:13 ]
- OS やコンパイラの情報でも出さないとこれ以上どうしようもないだろ。エスパーでもなけりゃ。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:42:31 ]
- リブートしてみるとか
- 375 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 02:53:40 ]
- エクスプローラなんかでやったときとプログラムでやったときとで権限が違うとか。
Vistaだったらありそうだ。
- 376 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 02:54:17 ]
- おれの経験から予想するとtest.textになってると予想
それで何時間も悩んだことがあるw
- 377 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:23:03 ]
- >>318
_T("なんたら") を L"なんたら" で良ければ、 #define _T(x) L ## x でいいんじゃないか?
- 378 名前:デフォルトの名無しさん [2008/02/11(月) 04:10:31 ]
- 明日までに1000×1000くらいの行列の逆行列とかを計算することが必要な宿題が
出ました。他の人はmatlabでやるのですが、自分はc++でやろうと思ってます。 逆行列の計算は自分で実装しなくてよいので、ライブラリとかを使おうと思ってます。 今調べたところでは、有名なc++用の行列計算ルーチンは、blitz++, MTL, blas, TNTなどがあることが分かりました。将来性(一度覚えたら長く使える)と性能(一番重視) を考えると、どれを選ぶべきでしょうか? よろしくお願いします。
- 379 名前:デフォルトの名無しさん [2008/02/11(月) 04:20:20 ]
- すいません、
> 明日まで じゃなくて、来週までです。
- 380 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 04:20:26 ]
- 俺は LAPACK 使ってるけど、
他の選択肢を吟味した訳じゃないからなあ。
- 381 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 04:37:58 ]
- >>378
将来性はどれを覚えても同じかと。 C++を長く使うのであれば他人のライブラリを実装することも多くなると思う。 性能というのが速度重視であれば自分で実測した方が早いかな? 他には、関連ページの多さ、組み込み易さ、ソースが公開されているか?あたりを重視して決めればいいかと ぶっちゃけmatlab使えるならそっちを使った方がいいようにも思うが・・
- 382 名前:デフォルトの名無しさん [2008/02/11(月) 05:10:35 ]
- >>380
>>381 ありがとうございます。自分が一応一番C++ができる(ことになっている)ので、matlabとの 性能比較のために、自分がc++版を実装することを期待されてます。簡単な偏微分を解く課題なのですが、 絶対matlabに勝ちたいので、自分の環境で性能比較してみます。とりあえず、選択範囲としては、 lapack, tnt, blas, mtl, blitz++, ublas(blasのboost版), mkl(intelのマスカーネルライブラリ) くらいでしょうか?
- 383 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:32:00 ]
- >>382
無駄な努力だと思うけど。どうしてもってことならコンパイラもiccにすることお勧め。 どうせなら、cublasかClearSpeedでも使ってぶっち切りを狙うのもいいかもねw
- 384 名前:デフォルトの名無しさん [2008/02/11(月) 09:15:11 ]
- >>383
どちらも専用ハードが必要じゃないですか。 でもこんなのもあるんですね。知らなかった。 コンパイラはiccとgccを比較します。
- 385 名前:デフォルトの名無しさん [2008/02/11(月) 09:51:09 ]
- CloseHandleの前後で、ハンドルが閉じられていることを確認するにはどうしたらいいですか
- 386 名前:デフォルトの名無しさん [2008/02/11(月) 10:00:18 ]
- ハンドルが使用中かどうかを知りたいんです
- 387 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:00:48 ]
- なぜそんなことをする必要があるのですか
- 388 名前:デフォルトの名無しさん [2008/02/11(月) 10:06:36 ]
- たとえばサブディレクトリのファイルリストをひとつひとつ取得したいとき、
同一ディレクトリにまだファイルが残っていれば次のファイルを呼んで、 無ければハンドルを解放して、子ティレクトリへ進めたいんです
- 389 名前:デフォルトの名無しさん [2008/02/11(月) 10:07:45 ]
- フラグを別に持っていれば確認できますが、なるべく変数を減らしたいと思います
- 390 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:09:05 ]
- かならずNULLで初期化してCloseしたらNULL代入すればいい。
- 391 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:09:56 ]
- ファイルハンドルは NULL じゃなくて
INVALID_HANDLE_VALUE だ!
- 392 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:16:38 ]
- NULLで比較しちゃってるコード多いけどな
それで動いちゃってるし 型安全なtypedefでもないかぎり防ぐのは無理ぽ
- 393 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:17:59 ]
- ごめん間違えた
INVALID_HANDLE_VALUEは-1だった
- 394 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:19:16 ]
- >>392
クラス作ればいいじゃん。
- 395 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:29:42 ]
- >>388
なんか設計がおかしいように気がするけど... 擬似コードでいいから晒してみてよ。
- 396 名前:デフォルトの名無しさん [2008/02/11(月) 10:42:25 ]
- main(){
dirserch dir("c:\\windows"); cout << dir.next(); cout << dir.next(); cout << dir.next(); }
- 397 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:44:52 ]
- C だと不完全型を利用して隠蔽する。
- 398 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:53:10 ]
- Cでshared_ptrみたいなのはないの?
- 399 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:55:22 ]
- テンプレートが無いのが辛い所だな。
マクロで何とかできなくはないが。
- 400 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:56:52 ]
- それ以前にデストラクタが無いんだから仕方が無い
- 401 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:00:54 ]
- AddRef/Release を自前でやるなら問題ない。
面倒だけど。
- 402 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:02:11 ]
- COMを勉強中で、インターフェースを実装したクラスの情報を隠したいのですが
取得したものをみると、CFileの内容がくっついて来てしまいます // idl [uuid(...), version(1.0), hidden, object] interface IFile : IUnknown { HRESULT method(); } [uuid(...), version(1.0), hidden] coclass CFile { interface IFileBase; }; // 簡単なインターフェース取得 IFile * __stdcall create() { IUnknown *iface = new CFile; IFile *base = NULL; iface->QueryInterface(IID_IFile, reinterpret_cast<void**>(&base)); return base; } 属性にhidden指定するだけではだめなんでしょうか? WinXPsp2/.net2003/C++/ATL使用せず
- 403 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:08:24 ]
- なんで CoCreateInstance 使ってないの?
- 404 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:21:28 ]
- CoCreateInstanceはレジストリに登録しないと使えないと、どこかで見た記憶があり
更にDirectXのレジストリ登録を見る限り、musicしかなかったので この方法でいけるんじゃないかと思っていました CoCreateInstanceの方で調べて試してみます 指摘ありがとうございました
- 405 名前:388 できました [2008/02/11(月) 11:27:38 ]
- #include <iostream>
#include <vector> #include <string> #include <windows.h> using namespace std; class dirserch{ vector <string> dirname; vector <int > dir[300]; string path[300]; int n; WIN32_FIND_DATA fd; HANDLE hd; public: dirserch(char *ch); int next(string &str); }; main(){ dirserch dr("c:\\windows"); string str; while(dr.next(str))cout<<str<<endl;} dirserch::dirserch(char *ch){ n=0; path[0]=""; dir[0].push_back(0); dirname.push_back(ch); hd=NULL;} int dirserch::next(string &str){ for(;;){ if(hd==NULL){ int k=dir[n].size()-1; if(k<0){ if(n==0)return NULL; n--; continue; } path[n+1] = path[n] + dirname[dir[n][k]] + "\\"; dir[n].resize(k); n++; hd = FindFirstFile((path[n]+"*").c_str(), &fd);} for(;;){ if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ if(fd.cFileName[0]!='.' || ( fd.cFileName[1]!='.' && fd.cFileName[1]!='\0' )){ int k=dirname.size(); dir[n].push_back(k); dirname.push_back(fd.cFileName);}} else { str=path[n]+fd.cFileName; if(!FindNextFile(hd, &fd)){CloseHandle(hd); hd=NULL;} return 1;} if(!FindNextFile(hd, &fd)){CloseHandle(hd); hd=NULL;break;}}}}
- 406 名前:388 できました [2008/02/11(月) 11:30:24 ]
- 全ファイル名を順番に出力する機能って基礎的だと思うのですが、標準にないので作ろうと思いましたよ
- 407 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:39:33 ]
- 再帰使わないの?
- 408 名前:388 できました [2008/02/11(月) 11:41:51 ]
- 再帰はつかいません パソコンにメモリ管理を任せると、鈍くなったり不安定になるからです
- 409 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:45:04 ]
- それだとWindowsやLinuxといったOS自体使えない理屈だが・・・
- 410 名前:388 できました [2008/02/11(月) 11:46:13 ]
- メモリというより、データをスタックへ積むコンパイラの仕組みでした
- 411 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:00:59 ]
- ファイルの列挙くらいは大丈夫だと思うけど
- 412 名前:デフォルトの名無しさん [2008/02/11(月) 12:02:05 ]
- 複数のファイル(1000以上)にランダムに書き込みがある時、
HDDの内蔵キャッシュやwindowsの標準キャッシュの効き目が悪くなるので バッファ付きファイル出力クラスを作ります
- 413 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:05:26 ]
- そうか。がんばれ
- 414 名前:デフォルトの名無しさん [2008/02/11(月) 12:09:05 ]
- double であることを明示的にするには、数字の最後にLをつければいいですか?
- 415 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:14:08 ]
- .0でいいんじゃね?
- 416 名前:デフォルトの名無しさん [2008/02/11(月) 12:20:12 ]
- >>415
やっぱりそっちの方がいいかな。 100とか1とか切りのいい数字なんだけど、doubleで計算させたいときに、 せっかく切りがいいのに、100.0とかするのがいやだったんだけど、 100だとintとかにみえてしまう感じ。 やっぱり、.0にしときます。 ありがとうです。
- 417 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:24:19 ]
- 整数リテラルにLつけてもlongにしかならんだろ
- 418 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:27:18 ]
- 100.でもおkだった気がする。すごく中途半端だけど
- 419 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:27:22 ]
- 2.0Lもdoubleではなくね
- 420 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:27:59 ]
- bccだと100.0Lにするとdoubleじゃなくてlong double(80bit)になっちまう。
- 421 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:29:00 ]
- あるとすればdだよな。あるとすれば。
- 422 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:30:26 ]
- > 100だとintとかにみえてしまう感じ
見た目の問題じゃなくて、実際にコンパイラにそう解釈されてしまうよ。 暗黙の型変換はおいておくとして。
- 423 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:30:29 ]
- bcc以外でもlong doubleだろう・・・
- 424 名前:漏れは 100. かな。 mailto:sage [2008/02/11(月) 13:16:38 ]
- C++なら、double(100)でいいよ。
- 425 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:19:51 ]
- てゆーかそれでいいならcでも(double)100でいいだろw キャストだけど
- 426 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:24:28 ]
- >>391
ここでは有効かどうか区別できれば十分なんだからNULL使ってもいいと思う。
- 427 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:40:07 ]
- >>426
有効なハンドルとしてNULL(=0)返されたらどうすんだ
- 428 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:41:49 ]
- 正常なハンドルとして0を返すライブラリの設計がおかしいと考えるんだ。
- 429 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:43:49 ]
- おかしくても使わねばならんこともある。
- 430 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:45:03 ]
- 0と-1が無効というハンドルもあるのさ・・・
- 431 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:07:48 ]
- >>426-430
て言うか、ハンドルはポインタとは違うんだから NULL と 比較するなんて発想する奴はどうかしてると思う。
- 432 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:13:04 ]
- しかし型の実体がポインタだから困る
- 433 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:13:06 ]
- >>431
ハンドルの正確な定義って何?
- 434 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:19:45 ]
- PVOID
- 435 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:26:24 ]
- >>433
実体を一意に示す値じゃないの? 正確な表現かどうかわからないけど。 ポインタもハンドルの1つの設計としてありえるし、 整数で0から順に付番する設計も考えられる。
- 436 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:32:01 ]
- 実態が何かは関係なく、ハンドルはハンドルとして扱わないと。
- 437 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:49:17 ]
- >>436
そういう抽象的なことで逃げるのがWindowsプログラマ
- 438 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:58:02 ]
- >>437
まあお前はFILEをいじってドツボにはまってろ。
|

|