- 1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ]
- エスケープシーケンスや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
- 348 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:52:00 ]
- >>347
そうだな。何とか形式のファイルのサマリーを 出してくれるツールがあったな。
- 349 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 02:57:13 ]
- よく、C++ における class と struct の違いはデフォルトで private か
public かの差しかないって言うけど、本当? class だと継承やらの情報を管理するための暗黙のメンバが最初にくっつかない? class C {int a;} struct S{int a;} C c; S s; を実行してデバッガで c と s の中身見てみるとメンバ違わない?
- 350 名前:デフォルトの名無しさん [2008/03/05(水) 03:10:19 ]
- クラスはメンバ関数や、オーバーロードが使えるだろ
構造体の拡張だろう
- 351 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:14:17 ]
- 本とかだと、class と struct はデフォルトの可視範囲が異なるだけで、
コンパイラレベルでは全く同一ですと書いてある。
- 352 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:16:08 ]
- >>349
structも継承できるのに何でそこが違うとおもったんだ?
- 353 名前:デフォルトの名無しさん [2008/03/05(水) 03:16:27 ]
- 細かいことは気にするな 使う側として同じなら構わないだろう
- 354 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:17:46 ]
- >>349
大抵の実装では、仮想関数を持つクラス・構造体は、 仮想関数呼出のためのテーブル (vtbl)へのポインタを隠し持っているが、 これもクラス・構造体どちらでも同じ。 規格でも構造体とクラスは完全に同一視され、 構造体について何か独立した規定は存在しない。 全てクラスとしてまとめられている。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 04:19:31 ]
- full bokko
- 356 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 07:17:09 ]
- そして大抵の実装では
仮想関数を持たないクラス・構造体は vtbl へのポインタを持っていない。
- 357 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 07:38:19 ]
- >>347
H8やSHでは#pragma stacksize XXX というのがあるので、 スタックサイズはコンパイル時、スタックアドレスはリンク時ということかな。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:45:07 ]
- struct S{ int m_a; int m_b}
として m_b に代入しようとして void hoge(void *s){ int offset = sizeof(int); unsgiend char * p = (unsgiend char *)s; int * m_b = p[offset]; *m_b = 1234 } みたいなコードが書いてあると位置がずれて死ぬ訳か
- 359 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:23:24 ]
- >>358
いいえ、環境依存です。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:30:41 ]
- struct S {
int a; int b; void clear() { ZeroMemory(this, sizeof(*this)); }; } こういうのもマズイ?
- 361 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:32:20 ]
- >>360
いつか POD の規則から外れる変更を加えたときに忘れずに修正する覚悟が必要。
- 362 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:42:56 ]
- vectorとか追加した場合ですね。
上のほうで出てた、仮想関数を持つクラスを継承して vtbl へのポインタを持ってる場合は>360で問題無しですか?
- 363 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:42:35 ]
- >>362
仮想関数を持ったものも POD から外れる。
- 364 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:45:50 ]
- >>357
HEWでそれやってたな。てかconfig入力画面でメモリセクションのカスタマイズできた。
- 365 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:47:58 ]
- struct S {
std::vector m_v; } s; で ZeroMemory(&s, sizeof(S)); ってやって死んだ事がある
- 366 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:46:02 ]
- コンパイラBCC55
class PPP{ public: union{ struct{ int n; struct{ enum Hoge hoge; int x; }aa[32][32]; LPCWSTR name[256]; }a; struct{ int p; char i; float y; Hoge *o; }b; struct{}c; }data; }; こんな共用体がクラス変数になってる時に PPP ppp; とするとそこでプログラムが例外も吐かずに落ちてしまいます。 しかし、PPPを他のクラスのクラス変数として宣言しておけば落ちません。 class Hoka{ PPP p; }; 分かる人おながいしまつ・・・。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:47:00 ]
- ちなみにenum HogeはPPPの中で定義されてます。すいません
- 368 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:21:18 ]
- 現象が再現する最小限のソースうp
- 369 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:39:59 ]
- 今更ですが>>290のことで
vector<int> num; num[i*j]=a; でnum.size()が不定のとき(i*jより小さいときもある)場合 先にnum[i*j]を確保して、num[i*j]=aを入れればよいのでしょうか 確保の仕方を教えてください
- 370 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:46:08 ]
- >>369
num.resize(100) とかで好きなサイズに変更する
- 371 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:20:53 ]
- num.resize(i*j)っていうのも可能ってことでしょうか?
- 372 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:28:07 ]
- >>368最小限が分かりづらいのでエラーの出ないnewで代用しました。
- 373 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:58:15 ]
- >>371
可能だが resize(i*j) ではサイズが足りないと思うぞ
- 374 名前:デフォルトの名無しさん [2008/03/05(水) 16:14:35 ]
- もっとも使われていないバッファを解放したいのですがSTLなどで良いライブラリはありますか?
- 375 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:53:00 ]
- >>374
せめてもうちょっと具体的に言わないとどうにもならないと思うよ
- 376 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:57:59 ]
- LRUを実装するのに適したコンテナはどれでしょうかってことだとエスパーしてみる
JavaのLinkedHashMapみたいなやつ? STLにそれはないから、mapとlistを組み合わせるのかな・・
- 377 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:39:44 ]
- 3次元配列(texture)を動的に確保しようと
if( (int)texture.size() < ( temp[0] + temp[1]*maxValue[0] + temp[2]*maxValue[0]*maxValue[1] ) ) texture.resize(temp[0] + temp[1]*maxValue[0] + temp[2]*maxValue[0]*maxValue[1]); texture[temp[0] + temp[1]*maxValue[0] + temp[2]*maxValue[0]*maxValue[1]] = num; こうしたら、格納されません。 現在の3次元配列の幅よりも、大きいのが出てきたら値を取り直して、入るべき所にぶち込む ってことをやりたいだけなのですが
- 378 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:58:40 ]
- >>377
サイズが 10 だったら、有効なインデックスは 0〜9 だ サイズが temp[0] + .... *maxValue[1] だったら、 有効なインデックスは 0 〜 temp[0] + .... *maxValue[1] - 1 までだ
- 379 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:07:20 ]
- >>378
ありがとうございます、それが抜けていました ただ 0 0 0 があったときに格納できないというエラーが出てきて 後少しなのに
- 380 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:20:23 ]
- class Aを例外として投げるとき
throw new A; のようにnewで生成して投げるのと throw A(); と投げるのはどっちが良いのでしょうか?
- 381 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:25:04 ]
- 自プロセスのHWNDを取るにはどうしたらいいのでしょうか?
- 382 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:25:10 ]
- むかーしどっかで見たのですが、3次元以上の配列は使わない方が良いってどういうことでしょうか?
ソースがどこだったか覚えてないのですが、そのときの記憶があり3次元以上はなるたけ使わないようにしてる原状です
- 383 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:27:31 ]
- あんま多いと気づかずやらかす類のバグが増えるかも…しれないけど決定的な理由じゃねえよな
- 384 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:37:17 ]
- >>380
Javaと一緒にすんな
- 385 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:57:35 ]
- >>382
その配列が表すモノが本質的に3次元以上のモノなら3次元配列で良いけど 構造体やクラス等で表すべきモノを配列にしてしまうのは避けるべき
- 386 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:47:36 ]
- 数値計算で添字3つ以上の行列とか扱わない限り、
まず必要になることはないと思うけどね。
- 387 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:52:58 ]
- >>380
newするとどこかでdeleteせんといかんよ。
- 388 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:29:17 ]
- >>380
new はしない。
- 389 名前:デフォルトの名無しさん [2008/03/05(水) 22:04:19 ]
- #define SAFE_DELETE(p) {delete (p); (p)=NULL;}
を定義して、 SAFE_DELETE(ptr); とすると「構文エラー : ';' が〜の前にありません」のエラーになってしまいます。 delete ptr;なら普通にコンパイルできるのですが、 どこが悪いのでしょうか。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:06:01 ]
- ちょっと行き詰まってしまったので質問させて下さい。
VC2005、WinXP64で以下のようなプログラムを作ったのですが、うまく動いてくれません。 DWORD WINAPI ThreadPrc(LPVOID lpParameter) { while (!ThreadTerminated){ //要求があるまで待機 WaitForSingleObject(hEventHandle,INFINITE); if (ThreadTerminated) break; //共有オブジェクトの排他アクセス WaitForSingleObject(hMutexHandle,INFINITE); //適当に処理 ReleaseMutex(hMutexHandle); //処理が終わると相手に通知 //ここがおかしい SetEvent(hDoneEventHandle); } return 0; } 普段はDelphiでやってますが、64ビットでビルドする必要があったので、Delphiで作ったものをC++に移植しました。 プロセス間通信でいろいろやってるわけなのですが、同じところでいつもタイムアウトしてしまいます。 もちろんINFINITEにするとそのまま固まってしまいます。 32ビットプロセスでSetEventして、64ビットプロセスでWaitForするのは成功するのですが、その逆がうまくいかないのです。 VC固有の問題なのか、64ビットの問題なのか、関係ありそうなのは調べましたが全く原因が分かりません。 この部分さえうまくいけば完成なのですが・・・。 どなたか分かる方いましたらアドバイスお願いします(o*。_。)o
- 391 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:09:05 ]
- >>389
SAFE_DELETE(ptr); は {delete (p); (p)=NULL;}; に展開される。 } の後に ; があるのがポイント。 これで何か起こってんじゃね?
- 392 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:12:09 ]
- >>389
問題の起こる最小のコードをplz!
- 393 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:17:54 ]
- >>389
うちの環境だと普通に動いてしまったよー。 周りを疑ってみるべき
- 394 名前:331 mailto:sage [2008/03/05(水) 22:18:39 ]
- なるほど!
分かりやすい説明ありがとうございましたm(_ _)m
- 395 名前:389 mailto:sage [2008/03/05(水) 22:20:21 ]
- 周りを少し抜き出すとこんな感じです。
-----SystemMacro.h---------- #ifndef SYSTEMMACRO_H #define SYSTEMMACRO_H #define SAFE_DELETE(p) {delete (p); (p)=NULL;} #endif ------List.h---------- #include <windows.h> #include "../system/SystemMacro.h" template <class T> class List { public: virtual ~List(){ if(!_tempFlg) { WORD i; for(i=0; i<_ct; i++) { delete _arr[i]; } } SAFE_DELETE(_arr); //←ここをdelete _arr;にするとコンパイル通る } }; ※Listのメンバ変数は省略してます。
- 396 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:21:28 ]
- template <typename T>
void SafeDelete(T *& p) { delete p; p = NULL; }
- 397 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:23:00 ]
- なんか怪しげなコードだが
_arrの型は?
- 398 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:24:06 ]
- どーでもいいけど _ は変数名の前につける習慣は良くない。
つけるなら後ろに。
- 399 名前:389 mailto:sage [2008/03/05(水) 22:25:12 ]
- あ、_arrがテンプレートの、T**型なのですが、
それが悪いのでしょうか。
- 400 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:29:21 ]
- fmtflags setf(fmtflags flg, fmtflags mask);
関数の説明で、この関数は flags((flags() & ~mask) | (flag & mask)); のような処理をしている、と書いてあったのですが、 flags((flags() & ~mask) | flag); でも同じではないでしょうか? なぜわざわざ(flag & mask)と書いてあるのでしょうか。
- 401 名前:389 mailto:sage [2008/03/05(水) 22:37:45 ]
- >>396
ありがとうございます。 >>397 template <class T>のT**型です。 >>398 とあるJavaのソースでクラスのメンバ変数の先頭に_をつけてたのを真似してます。 C言語はまだ初めたばかりな上、グーグルと2chで全て学んだので、 基礎がなってないのですが、先頭_はなんで不味いんでしょうか。 上のListクラスの機能は、たぶんstd::vectorとほぼ同じです。 標準ライブラリというのを知らなくて、作ってしまいました。
- 402 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:38:32 ]
- >>400
> 同じではないでしょうか? いや、同じじゃないから。
- 403 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:43:14 ]
- だれか>>391に突っ込んでやれよw
>>401 「_」始まりの単語はシステム予約される可能性があるから。
- 404 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:45:19 ]
- pは何処から出てきた?
でいいのかな。
- 405 名前:389 mailto:sage [2008/03/05(水) 22:49:40 ]
- >>403
ありがとうございます。 }の後ろに;をつけても、うちの環境では動きました。
- 406 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:06:52 ]
- レスありがとうございます。
fmtflags setf(ios::hex, ios::basefield); で、 ios::hex が 0x0800 ios::bsaefield が0x0e00 とすると、 ios::hex & ios::basefield で、 0000 1000 0000 0000 と 0000 1110 0000 0000 の論理積なので、 0000 1000 0000 0000 で、結局 ios::hex(0000 1000 0000 0000) そのものと変わらないじゃんと思ったのですが、どこかで勘違いしているのでしょうか。
- 407 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:08:47 ]
- >>406
> 論理積なので、 いや、違うから。
- 408 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:14:46 ]
- とりあえず
SAFE_DELETE(_arr); を {delete (_arr); (_arr)=NULL;}; に置き換えてコンパイルが通るかどうか。 あと、コンパイラは何?
- 409 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:16:54 ]
- >>400
flgは立てたいビット、maskはflgの属するフィールドを指定するが、 flgがmaskのフィールドに属さなかった場合に、 余計なフィールドのビットを立ててしまうのを防ぐため。
- 410 名前:デフォルトの名無しさん [2008/03/05(水) 23:24:26 ]
- 質問させて頂きたいのですが、
このように宣言しましたが、 char a[] = "1234"; char b[] = "4567"; char* abc[2][255]={ a, b }; *abc[1]で値が取り出せません。 こういうやり方は無理でしょうか?
- 411 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:30:23 ]
- >>410
abcはポインタが二次元に並んだ配列だが、それでいいのか? やりたいのは、ポインタの一次元配列のように見えるが。 つまり、こう。 char* abc[2] = {a,b}; そうしたら、 *abc[0]は'1' になる。
- 412 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:47:55 ]
- >399
>あ、_arrがテンプレートの、T**型なのですが >395を見ると delete _arr[i]; とあるから、_attrは new[] で確保したアドレスを前提としていないか? それなら delete ではなく delete[] とすべき。 コンパイルエラーの件とは無関係だが。
- 413 名前:デフォルトの名無しさん [2008/03/05(水) 23:55:17 ]
- 411>
おっしゃるとおり二次元配列のポインタですね。 全然気がつきませんでした。 ありがとうございます。
- 414 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:16:05 ]
- >389
とりあえず本論とは別だが、その手のマクロは if(flag) SAFE_DELETE(p); else do_something(); みたいにするとエラーになるのでしばしば #define SAFE_DELETE(p) do { delete (p); (p) = NULL; } while(0) のように定義されることが多い。
- 415 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:23:46 ]
- この場合なら
#define SAFE_DELETE(p) ((void)(delete (p), (p) = NULL)) でもいいと思うけどね。 まあ、式中に書けるのが嫌だというのであれば、 do-while 使ったのでもいい。
- 416 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:50:58 ]
- SAFE_DELETEを使ってるのを見ると
ああ10年前に学ぶのを止めてしまったんだなと分かる 自分自身がSAFE_DELETEされてしまったんだ
- 417 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 03:06:00 ]
- >416
ちなみにトレンドは?
- 418 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 03:32:56 ]
- 416じゃないけどshared_ptrとかじゃないの
- 419 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 03:44:42 ]
- ずっと前から auto_ptr と vector によって delete の出番はほとんど無くなっている。
- 420 名前:417 mailto:sage [2008/03/06(木) 04:10:27 ]
- ああ、そういう意味でか。勘違いしてた、さんきゅ。
- 421 名前:デフォルトの名無しさん [2008/03/06(木) 06:12:17 ]
- ガベージコレクションの緩いやつの理論はありますか?
たとえばファイルに書き出すために複数のバッファを用意したとして もう書き込みが発生しないだろうと予測されたら書き出してメモリを解放するというやつです
- 422 名前:デフォルトの名無しさん [2008/03/06(木) 06:15:54 ]
- 100ファイルに書き込みがあって試行するうちに総数の10%のみの書き込みだけになったら
それ以外は書き込みがないだろうと思って解放したいのですが、タイミングをいつにするか具体的に計算する方法は ありますか
- 423 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 06:49:42 ]
- LRUでぐぐればいいんじゃない?
- 424 名前:デフォルトの名無しさん [2008/03/06(木) 07:02:10 ]
- ちょっと違うんです
たとえばバッファは10個なら、10個前が一番古いですが、11個目の後 1〜10番が続くかもしれないじゃないですか もっとも利用されなかっただけではなく、バッファサイズを増したほうがいいかも調べたいんです
- 425 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:24:11 ]
- 最終使用時間を記録しといて、N秒以上使われてなかったら削除
とかでいいんじゃない?
- 426 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:33:28 ]
- >>419
それって大問題なんじゃなかったっけ?
- 427 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:20:10 ]
- 質問でございます。
int* A_PTR = new int[5]; として確保した領域の、たとえば、A_PTR[3]のような、 途中の領域だけ解放(delete)することは可能でしょうか?
- 428 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:45:33 ]
- >>427
無理
- 429 名前:427 mailto:sage [2008/03/06(木) 16:59:15 ]
- >>428
やはり無理なんですね。 別のポインタに入れてからdeleteなど、 いろいろ実験していて気が狂いそうでしたので 大変すっきりしました。 れす、ありがとうございました。
- 430 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:32:23 ]
- CString cstr;
unsigned char uc[sizeof(cstr)] = (unsigned char)(LPCSTR)cstr; コンパイル通りません。要は、↓を動的にしたいです。 unsigned char uc[10]="0123456789"; よろしくおねがいします
- 431 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:39:19 ]
- 配列のサイズを動的に変えるのは無理です。
ヒープで取って良いのなら、 char* uc = new char[文字列の長さ+1]; strcpy(uc, コピーしたい文字列へのポインタ) でもしてください。
- 432 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:41:23 ]
- これではだめ?
unsigned char* uc = (unsigned char*)(LPCSTR)cstr;
- 433 名前:430 mailto:sage [2008/03/06(木) 18:04:24 ]
- >>431
やっぱり無理ですか。。 >>432 uc[0],uc[1]みたいに、ポインタではなく配列としてアクセスしたいんですよね。。 なんか根本的に駄目なソース書いてる気がしてきたので、発想を変えてみます。 どうもありがとうございました。
- 434 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:06:06 ]
- 動的に大きさを変えたいならstd::vector使えばいいやん。
- 435 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:06:34 ]
- あ、文字列ならstd::stringな。
- 436 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:09:14 ]
- >>433
添え字演算子はポインタでも使えるけど。
- 437 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:29:09 ]
- >>433
E1[E2] は *((E1) + (E2)) の syntax sugar だ。 uc[0] → *(uc + 0) uc[1] → *(uc + 1)
- 438 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:40:20 ]
- uc[0] → *(uc + 0) → *(0 + uc) → 0[uc]
uc[1] → *(uc + 1) → *(1 + uc) → 1[uc]
- 439 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:43:02 ]
- >>438
さんざん既出 "0123456789ABCDEF"[i] を大昔はやっていた。
- 440 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:44:58 ]
- それは関係ないだろう・・・。
i["0123456789ABCDEF"] ならともかく。
- 441 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:48:59 ]
- >>440
おんなじやんけ
- 442 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:49:41 ]
- あま〜〜〜い
- 443 名前:389 mailto:sage [2008/03/06(木) 22:58:20 ]
- みなさん色々とアドバイスありがとうございました。
>>408 通ります。Visual Studio.NET 2003を使ってます。 >>412 _arr = new T*[_max];という感じで確保してます。 delete[] は使ったことないですが、やってみます。 >>414 それは思いつきませんでした。 >>415 その書き方は初めて見ました。 >>416 10年前というか、C言語始めてまだ1ヶ月半なんですが。。。
- 444 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:05:22 ]
- アレだ、「個体進化は系統進化を繰り返す」
- 445 名前:デフォルトの名無しさん [2008/03/06(木) 23:10:44 ]
- 以下のコードでファイルの2番目のバイトだけを
書き換えようとしたんですが 全く何も代わりません #include <stdio.h> int main(void){ FILE *fp; char cIn; char cOut = 'X'; int cnt; fp = fopen("test.txt", "rb+"); fread(&cIn, 1, 1, fp); printf("%c\n", cIn); cnt = fwrite(&cOut, 1, 1, fp); printf("%d\n", cnt); fclose(fp); return 0; } <test.txtの内容↓> ABCDEFG <出力結果↓> A 1 これはどう理解したらいいんでしょうか? BCとVCで試してみました
- 446 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:20:59 ]
- freadしてA読んで、表示した(出力1行目)
fwriteして次のBをXで上書きして、(test.txtの中身変化) 要素数の1が戻ってきて表示(出力2行目) 何が不思議なんだ?
- 447 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:21:31 ]
- >>445
readからwriteに切り替える時、もしくはwriteからreadに切り替える時は 必ず間にfseek()を挟む事。
- 448 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:39:54 ]
- >>445
コンパイル君のぼやき 「freadとfwriteに&使わないで下さいよ。あと、辞書ぐらい買ってくださいよ。 何でもかんでも私に聞かないで下さいよ。なんでもかんでもプリントにしないでくさいよ。 宣言するんだったらまともに宣言してくださいよ。main関数の引数ぐらい使ってくださいよ」
|

|