【初心者歓迎】C/C++室 Ver.30【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/08/21(月) 16:33:13ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.29【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1152367512/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2006/08/21(月) 16:35:510003デフォルトの名無しさん
2006/08/21(月) 16:45:51本スレはこっち
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
0004デフォルトの名無しさん
2006/08/21(月) 16:56:08乙
0005デフォルトの名無しさん
2006/08/21(月) 17:55:070006デフォルトの名無しさん
2006/08/21(月) 17:57:29再帰構造ととらえてよろしいのか?
0007デフォルトの名無しさん
2006/08/21(月) 19:15:510008デフォルトの名無しさん
2006/08/21(月) 19:18:030009デフォルトの名無しさん
2006/08/21(月) 20:23:470010デフォルトの名無しさん
2006/08/21(月) 20:28:410011デフォルトの名無しさん
2006/08/21(月) 20:36:200012デフォルトの名無しさん
2006/08/21(月) 20:56:020013デフォルトの名無しさん
2006/08/21(月) 21:01:030014デフォルトの名無しさん
2006/08/21(月) 21:02:380015【初心者歓迎】C/C++室 Ver.31【環境依存OK】
2006/08/21(月) 21:35:39エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0016【初心者歓迎】C/C++室 Ver.31【環境依存OK】
2006/08/21(月) 21:39:26エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.29【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1152367512/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0017デフォルトの名無しさん
2006/08/21(月) 21:40:22判らなくなるだろw
0018デフォルトの名無しさん
2006/08/21(月) 22:12:19↓
解説書購入
↓
printfやifを一通り使えるようになるレベル ←いまココ
オセロは何段階くらい先?
0019デフォルトの名無しさん
2006/08/21(月) 22:30:530020デフォルトの名無しさん
2006/08/21(月) 22:36:360021デフォルトの名無しさん
2006/08/21(月) 22:37:340022デフォルトの名無しさん
2006/08/21(月) 22:44:110023デフォルトの名無しさん
2006/08/21(月) 22:45:27俺もミラーリング参加する!
0024デフォルトの名無しさん
2006/08/21(月) 22:46:59002523
2006/08/21(月) 22:48:33正常に運営しつつ、「双子スレ」の記録を狙ってみては。
0026デフォルトの名無しさん
2006/08/21(月) 22:50:000027デフォルトの名無しさん
2006/08/21(月) 22:50:140028デフォルトの名無しさん
2006/08/21(月) 22:51:330029デフォルトの名無しさん
2006/08/21(月) 22:52:500030デフォルトの名無しさん
2006/08/21(月) 23:09:280031デフォルトの名無しさん
2006/08/21(月) 23:11:46まさに マルチスレッド
0032デフォルトの名無しさん
2006/08/21(月) 23:13:560033デフォルトの名無しさん
2006/08/21(月) 23:13:57ハゲワラタ
0034デフォルトの名無しさん
2006/08/21(月) 23:15:340035デフォルトの名無しさん
2006/08/21(月) 23:17:30次はメール欄もちゃんとミラーリングしろよ
0036デフォルトの名無しさん
2006/08/21(月) 23:18:42廃棄をおながいします。
0037デフォルトの名無しさん
2006/08/21(月) 23:39:260038デフォルトの名無しさん
2006/08/21(月) 23:40:04この話題で30も行くとこうなるのか。
0039デフォルトの名無しさん
2006/08/21(月) 23:40:380040デフォルトの名無しさん
2006/08/21(月) 23:41:370041デフォルトの名無しさん
2006/08/22(火) 00:02:090042デフォルトの名無しさん
2006/08/22(火) 00:03:10ああ、俺がちょうど書いてやろうと思ったのに。
0043デフォルトの名無しさん
2006/08/22(火) 00:09:220044953
2006/08/22(火) 01:13:54>>18私はC++を勉強して4ヶ月目で、授業では一応教科書一冊の範囲(ポインタまで)も終わったんですが
ぜんぜん駄目でした。
0045デフォルトの名無しさん
2006/08/22(火) 01:18:13OSはfreebsd4.11です。
#一応findしてみたところ/usr/includeにstring.hはあったのですが、
肝心のコードが書いてあるファイルが見つかりませんでした・・・
0046デフォルトの名無しさん
2006/08/22(火) 02:12:41Cは一通りわかってます。
0047AcceralatedC++とかEffectiveC++とか
2006/08/22(火) 02:44:37スレ違い。書籍スレにでもどうぞ。
0048デフォルトの名無しさん
2006/08/22(火) 04:31:090049デフォルトの名無しさん
2006/08/22(火) 08:56:380050デフォルトの名無しさん
2006/08/22(火) 09:26:410051デフォルトの名無しさん
2006/08/22(火) 09:27:54失敗ぷっ
0052デフォルトの名無しさん
2006/08/22(火) 11:26:33失敗ぷっ
0053デフォルトの名無しさん
2006/08/22(火) 11:37:050054デフォルトの名無しさん
2006/08/22(火) 11:48:300055デフォルトの名無しさん
2006/08/22(火) 13:55:550056デフォルトの名無しさん
2006/08/22(火) 14:41:19できない
0057デフォルトの名無しさん
2006/08/22(火) 14:53:07自分の環境(bc++5.5.1)では16進数で表示されるのですが、これを10進数で表示したいです。
0058デフォルトの名無しさん
2006/08/22(火) 14:53:570059デフォルトの名無しさん ◆BSGKNxcQW.
2006/08/22(火) 15:04:120060財前丈太郎 ◆WodAdTnrzc
2006/08/22(火) 15:10:020061デフォルトの名無しさん
2006/08/22(火) 15:33:280062デフォルトの名無しさん
2006/08/22(火) 15:39:020063デフォルトの名無しさん
2006/08/22(火) 15:51:380064デフォルトの名無しさん
2006/08/22(火) 15:52:14http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
あと本スレはこっち
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
0065デフォルトの名無しさん
2006/08/22(火) 21:30:49残りが10個以下ではあるけど何個かわからない整数を
1行ずつ構造体の配列に読み込みたいのですが、
どうしたらいいもんでしょうか?
4.543 3.12 45.32 6 3 4 3 6
3.1 7.4 3.1 4 1
84.32 2.33 1.22 9 4 3 1
こんな感じのテキストファイルを
tyepdef struct{
double a1;
double a2;
double a3;
int b[10];
} Hoge
みたいな構造体に入れていきたいのですが。
固定のものならfscanfで1行読み込んでたのですが、
何個かわからないものの読み込み方がわからないです。
0066デフォルトの名無しさん
2006/08/22(火) 21:37:010067デフォルトの名無しさん
2006/08/22(火) 21:39:32sscanfで変換した個数が戻るから、それを利用する。
0068デフォルトの名無しさん
2006/08/22(火) 22:09:06>>66
すいません、その個数の数え方がわかりません。
>>67
sscanfについて調べてみます。
0069デフォルトの名無しさん
2006/08/23(水) 14:42:27・Solaris2.5X
上記環境で動いているCのプログラムを移植する事になったのですが、この環境
でのintのバイト数は幾つになるのでしょうか?
0070仕様書無しさん
2006/08/23(水) 14:55:08sizeof(int)/sizeof(char)
0071デフォルトの名無しさん
2006/08/23(水) 15:01:55ディスプレイがないので怖くて電源あげられねえorz
007269
2006/08/23(水) 15:12:33そのマシンは触らせてもらえないので、テストPG等作れません。
>>71
資料には
・サーバー:SUN4/20
・CPU:SuperSparc
とあります。
>Sparcなら4
4バイトに該当するのでしょうか?
現行のシステムを作ったのは別の会社で、問合せ窓口が無く、
ユーザー側にもそこまで分かる方がいないので困ってます。
0073デフォルトの名無しさん
2006/08/23(水) 15:18:00プロジェクト始めりゃ大した問題出ないんじゃね?そうでなくても移植してりゃすぐ気づくだろ。
007469
2006/08/23(水) 15:26:55ありがとうございます。
sizeof(int)の指定でintの値をバイナリのまま可変長レコードでファイルに読み書き
していて、そのファイルの解析も兼ねてintのサイズが知りたかったのです。
0075デフォルトの名無しさん
2006/08/23(水) 15:28:51そのファイルは 相互環境で port するの?
0076デフォルトの名無しさん
2006/08/23(水) 15:36:450077デフォルトの名無しさん
2006/08/23(水) 15:37:30なんて言うんでしたっけ。
007869
2006/08/23(水) 15:39:10そのファイルは作成後に別の会社の別システムに転送しているので
そのまま使います。
007969
2006/08/23(水) 15:41:05>sparc は big-endian だぞ。
と言う事はバイトの格納順位が逆になっていると言う事ですか?
0080デフォルトの名無しさん
2006/08/23(水) 15:42:250081デフォルトの名無しさん
2006/08/23(水) 15:45:21でも一応こっちが本スレ
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
0082デフォルトの名無しさん
2006/08/23(水) 15:50:13(゚Д゚)ハァ? なんのコミュニティの話だ?とりあえずOSを言ってみろ。
スレ違いなヤカン…
0083デフォルトの名無しさん
2006/08/23(水) 15:56:13エンディアンとか含めて、仕様の sizeof(int) 自体が問題アリっぽくないか?
008477
2006/08/23(水) 15:58:26うぃんどうずです。
ゲームで一度貼り付けた画像クリアするんですけども、
画面を何か適当な色で塗りつぶすことでクリアとするじゃないですか。
それをなんと言うのか忘れてしまって。
008582
2006/08/23(水) 16:06:08DirectXXXとかならやったことねえ。
008669
2006/08/23(水) 16:09:55>移植先のマシンが little-endian ならな。
すいません、書き漏れましたがWindowsに移植します。
リコンパイル+α程度で行けそうだったのですが、大変そうになってしまいました。
0087デフォルトの名無しさん
2006/08/23(水) 16:15:440088デフォルトの名無しさん
2006/08/23(水) 16:31:43問題のファイルを出す喰う別会社の別システム は SUN4/20 のまま
自社のシステムが Windows
ってことか…
微妙に嫌なポーティング作業だね
0089デフォルトの名無しさん
2006/08/23(水) 16:41:470090デフォルトの名無しさん
2006/08/23(水) 16:44:350091デフォルトの名無しさん
2006/08/23(水) 17:03:430092デフォルトの名無しさん
2006/08/23(水) 17:07:11配列の要素数のことを言ってるなら�_
0093デフォルトの名無しさん
2006/08/23(水) 17:12:54static属性のついたsize_t型の変数を初期化します。
0094デフォルトの名無しさん
2006/08/23(水) 17:15:45static size_t len = strlen(arg);
は許されるよな? arg が先に定義されてないといけないけど。
0095デフォルトの名無しさん
2006/08/23(水) 17:19:46ありがとうございます、導入を検討してみます
0096デフォルトの名無しさん
2006/08/24(木) 08:26:270097デフォルトの名無しさん
2006/08/24(木) 23:35:22ifstream f("test.txt", ios_base::binary | ios_base::in);
......
unsigned short n;
f >> n;
// f.read((char*) &n, 2);
こんなソースを書いて、 f >> n だとエラーになるのに、
コメントのように read 関数を使うと、ちゃんと読めるのです。
原因はなんでしょうか。よろしくお願いします。
0098デフォルトの名無しさん
2006/08/25(金) 00:00:15【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
0099デフォルトの名無しさん
2006/08/25(金) 00:00:300100デフォルトの名無しさん
2006/08/25(金) 00:02:11すいません、そちらに行きます。
>>99
と思ったら、お答えいただきました。
誠にありがとうございます。m(_ _)m
0101デフォルトの名無しさん
2006/08/27(日) 08:18:30それ+個数、型がチェック出来る物が、
C、C++、ウィンドウズのどれかでないでしょうか。
0102デフォルトの名無しさん
2006/08/27(日) 08:35:45個数がチェックできるのなら可変じゃないような。
printf()系みたいにフォーマット指定があってそれと比較すると言うことか?
C++なら類似機能をクラスで作れるとは思うが、やりたいことをもっと具体的に。
0103101
2006/08/27(日) 08:50:28kahenko(10); → 10と出力
kahenko(5, "15", '8'); → 5 15 8と出力
例えばこんな事がしたいです。
va_arg(ap, ***)だと、型が分からないし、個数も分かりません。
0104デフォルトの名無しさん
2006/08/27(日) 08:53:41vector<boost::any>でも使ってコンテナに入れて渡せ。可変長引数の
代用になる物を考えろ。
0105101
2006/08/27(日) 08:59:410106デフォルトの名無しさん
2006/08/27(日) 20:20:49各引数の情報をprintf()の様に渡してやる必要がある。
個数、型共にわかる情報をな。
0107デフォルトの名無しさん
2006/08/30(水) 19:17:09これは最悪板行きコースかね?
0108デフォルトの名無しさん
2006/08/31(木) 15:00:13値が変になったクラスは、APIとかmfcとか使ってなく、純粋な演算系のクラスなんですが、
__int64の演算と、__int64の変数をBYTEにキャストして1バイトずつ処理しているところがあります。
1.win98では、__int64は使えないのでしょうか。
2.int変数や、使えるなら__int64変数に確保される領域は、win98も32bitxpも同じと思って間違いないでしょうか。
3.int内のBYTEコードが逆順に並んでいるとかはwin98(dos/v intel)でも同じと思って間違いないでしょうか。
0109デフォルトの名無しさん
2006/08/31(木) 15:27:212.コンパイラによる
3.エンディアンはCPU依存
そしてここは重複スレだ
0110デフォルトの名無しさん
2006/08/31(木) 15:43:53お尋ねしたい事があり書き込みさせて頂きます。
色々なサイトでIDやPassを自動配信するシステムがありますよね?
そのシステム方法を教えて頂けないでしょうか。
探してみて無料配布しているところなど探してみたのですが
見当たりませんでした。配布されているものじゃなく作る物なのでしょうか?
もし、作る物であるのならわかる方に教えて頂きたく思います。
どうぞ宜しくお願い致します(*- -)(*_ _)
0111デフォルトの名無しさん
2006/08/31(木) 16:01:14http://pc8.2ch.net/test/read.cgi/tech/1066747198/
0112デフォルトの名無しさん
2006/08/31(木) 16:06:06誘導スレに書き込めば良いのですね!
0113デフォルトの名無しさん
2006/09/13(水) 00:51:12bool flag = false;
.....
flag = flag != true;
以外にありますかね?
0114デフォルトの名無しさん
2006/09/13(水) 01:00:17じゃいかんの?
0115デフォルトの名無しさん
2006/09/13(水) 01:01:05...orz
ありがとうございました……
0116デフォルトの名無しさん
2006/09/13(水) 01:27:070117デフォルトの名無しさん
2006/09/13(水) 09:02:522を乗算するのってどうしてますか?
i=i*2;
以外にありますか?
つりではないです。
0118デフォルトの名無しさん
2006/09/13(水) 09:03:440119デフォルトの名無しさん
2006/09/13(水) 09:09:580120デフォルトの名無しさん
2006/09/13(水) 09:33:470121デフォルトの名無しさん
2006/09/13(水) 09:38:07自分が書きやすいように書けばいい。
0122デフォルトの名無しさん
2006/09/13(水) 13:03:3810倍するのってどうしてますか?
i=i*10;
以外にありますか?
つりではないです。
0123デフォルトの名無しさん
2006/09/13(水) 13:06:21i = i * 2 + i * 8;
i = (i << 1) + (i << 3);
0125デフォルトの名無しさん
2006/09/13(水) 13:18:22i が int だと勝手に思い込んでる香具師ら
0126122
2006/09/13(水) 13:55:210127デフォルトの名無しさん
2006/09/13(水) 14:01:310128デフォルトの名無しさん
2006/09/13(水) 15:22:02s << i << '0' >> i;
かなり C++ 忘れたな・・・。
0129122
2006/09/13(水) 15:34:450130デフォルトの名無しさん
2006/09/13(水) 20:23:54i *= 10;
0131デフォルトの名無しさん
2006/09/14(木) 02:12:230132デフォルトの名無しさん
2006/09/14(木) 02:29:500133デフォルトの名無しさん
2006/09/14(木) 14:00:28もし無いならば、どこから持ってくればいいのでしょうか?
0134デフォルトの名無しさん
2006/09/14(木) 14:12:31画面のプロパティでの設定に依存
0135133
2006/09/14(木) 14:17:20GetSysteColror()等で持って来れないかな?と。
0136デフォルトの名無しさん
2006/09/14(木) 14:18:12この度、VC6からVC2005に変えて勉強しています。
質問ですが、VC2005はCreateWindow()は使えないのでしょうか?
また、文字列を引数とする関数全てに
「LPCWSTRに変換できません」
というエラーになってしまいます。(MessageBox()など)
LPCWSTRでキャストすれば通るのですが、文字列指定する関数には
毎回LPCWSTRでキャストしないといけないのでしょうか?
低レベルな質問で申し訳ないですが、よろしくお願いします。
0137デフォルトの名無しさん
2006/09/14(木) 14:39:48くだすれVisual C++(超初心者用)その3 で質問してきます。
お騒がせしました。
0138デフォルトの名無しさん
2006/09/15(金) 23:09:260139デフォルトの名無しさん
2006/09/16(土) 04:27:41どのAPIを使えばいいのでしょうか。
0140デフォルトの名無しさん
2006/09/16(土) 05:00:02GetConsoleWindow()
ちなみに、まず必要ないと思うけど、9xからコンソールのウインドウハンドルを取得したいなら、
SetConsoleTitle()で、コンソールのタイトルバーをユニークな文字列にして、
FindWindow()で行けた。
0141デフォルトの名無しさん
2006/09/16(土) 13:24:21参照数カウント式だとオーバーフローのときどうしよう
とか困ってしまってわんわんわわん。
0142デフォルトの名無しさん
2006/09/16(土) 15:05:02unsigned int x = -1;
printf("%d" , x);
これで -1 と出力されるのは何故ですか?
0143デフォルトの名無しさん
2006/09/16(土) 15:13:080144デフォルトの名無しさん
2006/09/16(土) 15:14:07機種依存です。内部表現によります。
0145デフォルトの名無しさん
2006/09/16(土) 15:51:23printf("%d");
ってのはぬるぽを表示しようとしてるってことかな?
0146デフォルトの名無しさん
2006/09/16(土) 16:10:16( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←>>145
(_フ彡
0148デフォルトの名無しさん
2006/09/16(土) 21:41:24すごい数になりました。
>>144
ありがとうございます。少し研究してみます。
0149デフォルトの名無しさん
2006/09/16(土) 23:57:44とりあえず、-1は
1 << (sizeof(int) * 8 - 1)
だから、同じビット表現のままunsigned型変数に入ったんだろうな。
そうすると表示された数は、intが32bitだと仮定すると2147483648じゃないか?
0150デフォルトの名無しさん
2006/09/17(日) 00:00:41> とりあえず、-1は
> 1 << (sizeof(int) * 8 - 1)
そんな環境もあるのか。世界は広いな。
0151149
2006/09/17(日) 00:02:54-1 は ~0 の否定です。
表示されたと思われる数は4294967295です。
0152デフォルトの名無しさん
2006/09/17(日) 00:05:51> -1 は ~0 の否定です。
~0 の否定って、 0 じゃね?
0153デフォルトの名無しさん
2006/09/17(日) 00:07:00お前はバカじゃなくてただの無能だ
もう書くなクズ
0155デフォルトの名無しさん
2006/09/17(日) 00:11:44首吊って自殺した友人に謝れ。
0156デフォルトの名無しさん
2006/09/17(日) 00:13:050157デフォルトの名無しさん
2006/09/17(日) 00:14:300158デフォルトの名無しさん
2006/09/17(日) 00:32:200159デフォルトの名無しさん
2006/09/17(日) 00:40:390160デフォルトの名無しさん
2006/09/17(日) 00:41:30その型で表せる最大の値に1加えた数から、
元の負の数を加えたものが結果の値となる。
つまり142の場合、xは(UINT_MAX + 1) + -1、
つまりUINT_MAXで初期化されたことになる。
符合無し型から符号有り型への変換の場合、
元の値が変換先の型では範囲外となる場合、
その結果は処理系定義。
0161初心者ボーイ
2006/09/17(日) 01:40:36directX 9.0 2006 August
質問:directXとdirectshowを使ってプログラムをつくりたいのですが、
現在webカメラで画像を取り込みながらdirectxで3D表示をするプログラムをつくっています。
とりあえずコンパイルができません。どうすればいいのでしょうか?教えてください。
エラー内容:
warning C4005: 'WIN_TYPES' : マクロが再定義されました。
error C2061: 構文エラー : 識別子 'LPDIRECT3D'
error C2061: 構文エラー : 識別子 'LPDIRECT3DDEVICE'
error C2061: 構文エラー : 識別子 'LPDIRECT3D'
error C2061: 構文エラー : 識別子 'LPDIRECT3DDEVICE'
error C2061: 構文エラー : 識別子 'LPDIRECT3D2'
error C2061: 構文エラー : 識別子 'LPDIRECT3DDEVICE2'
error C2061: 構文エラー : 識別子 'LPDIRECT3D'
error C2061: 構文エラー : 識別子 'LPDIRECT3DDEVICE'
error C2061: 構文エラー : 識別子 'LPDIRECT3D2'
error C2061: 構文エラー : 識別子 'LPDIRECT3DDEVICE2'
error C2061: 構文エラー : 識別子 'LPDIRECT3DVIEWPORT'
error C2061: 構文エラー : 識別子 'LPDIRECT3DVIEWPORT'
error C2061: 構文エラー : 識別子 'LPDIRECT3D'
error C2061: 構文エラー : 識別子 'LPDIRECT3D2'
error C2061: 構文エラー : 識別子 'LPDIRECT3D2'
includeの順番:windows.h d3dx9.h dshow.h qedit.h stdio.h
補足:directshowにはISampleGrabberを使っているのでqeditをincludeしています。
qeditを外してincludeするとエラーが出ないため、qeditのところでエラーが出ているとは思います。
0162デフォルトの名無しさん
2006/09/17(日) 01:45:240163初心者ボーイ
2006/09/17(日) 01:51:46無理なんです。はい。
あとplatform sdkのdirectshowをincludeするようにもしてみましたが、駄目でした
0164デフォルトの名無しさん
2006/09/17(日) 03:21:58って書いてあるな。ヘルプに。
ISampleGrabberのインターフェース関係だけコピーして持ってくるのはどう?
0165デフォルトの名無しさん
2006/09/17(日) 10:30:27MESOって名前の8バイトの構造体を定義して、
struct MESO *masaru = (struct MESO *) 0x12345
for (i=0;i<1;i++){
masaru+1
}
ってやったら、masaruは8バイトの構造体の変数だから、masaruはfor文で
1アドレスを進めてますけど、実際は0x12345+8のアドレスにになりますよね?
0166デフォルトの名無しさん
2006/09/17(日) 10:33:13アドレスの進み方については、そう考えて問題ない。
0167デフォルトの名無しさん
2006/09/17(日) 11:20:290168デフォルトの名無しさん
2006/09/17(日) 12:47:280169デフォルトの名無しさん
2006/09/17(日) 21:25:18ファイルに以下のように書き込みたいんですが。
はじめの処理を行って、A、Bを書き込んで
次の処理が終わったら、C,Dを書き込んで・・・・
という風に、追記していきたいのですが
どうすればいいのでしょうか?
A,C,E,G・・・
B,D,F,H・・・
fprintfで何かコマンドとか、あるんでしょうか?
0170デフォルトの名無しさん
2006/09/17(日) 21:29:58その都度fopen()するなら"a"でオープンすればいい。
但し処理系によっては最後にEOFコードを付加する環境があるので、
1バイト削って追記するなど工夫しないといけない場合あり。
0171デフォルトの名無しさん
2006/09/17(日) 21:33:37ありがとうございます。
ちょっとやってみます!
0172デフォルトの名無しさん
2006/09/17(日) 21:47:38柴田本が読みやすいと聞いたことがあって今日見てきたのですが、初心者のくせに細かい疑問が出てくる僕には合わなそうでした…
詳しく書いてあるんだけど、とっつき易い簡単な入門者向きの本はありますか?
あれば是非教えてください、お願いします。
0173デフォルトの名無しさん
2006/09/17(日) 22:25:22ある本をみてダメと思うんなら他人が教える本はほとんどダメだぞ
あと、本屋で身銭を切って損をして自分にあった情報収集の方法を知るってのも勉強だ
とりあえず、お前はJISの規格書でも買っとけ
0174デフォルトの名無しさん
2006/09/17(日) 23:47:08柴田本の入門書は読み始めはちときつかったけど(著者偉そうなのがとくに)
内容はかなり良かったと思います。
とりあえず、お前はJISの規格書と柴田でも買っとけ
ゆっくりでもがんばりな。
0175デフォルトの名無しさん
2006/09/17(日) 23:51:44漢は黙ってK&R
0176デフォルトの名無しさん
2006/09/18(月) 00:05:30もう少し>169を注意深く読んでくれ。
>>169
>170の方法では、常に最後に追加する形だから、>169の順番で書くには使えない。
ACEGの順番で書けるようにそれらを一旦メモリ上にキープするなどの対策が必要。
いっそ、何をしたいのか具体的に書いてみたら?
0177172
2006/09/18(月) 00:41:00K&Rは初めて聞きましたので検索してみたのですが、初心者向きではなさそうですがw
また書店に行ってみます、皆様有難うございました。
0178デフォルトの名無しさん
2006/09/18(月) 03:21:28黙ってというか、ぐうの音も出なくなるが。
0179デフォルトの名無しさん
2006/09/18(月) 03:28:59いや172が必要としてるのはCだから
0180デフォルトの名無しさん
2006/09/18(月) 03:44:44馬鹿ついでに聞きたいんだけど、俺JISの規格書って読んだことねーだなあ。
http://www.amazon.co.jp/exec/obidos/ASIN/454212889X/%73%65%63%6c%61%6e%64%6c%6c%6a%70%2d%32%32/%72%65%66%3d%6e%6f%73%69%6d/
C以外のBASICとかには用が無い場合は何買えばいいのかね?
0181デフォルトの名無しさん
2006/09/18(月) 09:42:34http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=1
見るだけなら、http://www.jisc.go.jp/からJIS検索で規格番号X3010を探せば見つかる。
ただしどっちもC99相当。
ちなみにC++はX3014。
0182デフォルトの名無しさん
2006/09/18(月) 13:32:16いや、俺は最初の本がK&Rだったぞ。20年前だが。
0183デフォルトの名無しさん
2006/09/18(月) 15:17:19ならば
ttp://www.amazon.co.jp/gp/product/images/4756102700/ref=dp_image_text_0/249-4390771-9582731?ie=UTF8
漏れが使ってたのは第三版ではないが、K&Rよりは理解しやすかったな
ただし例がunix系の表現なのでそこんところが理解できないと難書になるかも
0184デフォルトの名無しさん
2006/09/18(月) 15:39:43あ、その本なつかしー。
K&Rと併読した記憶があるな。
0185デフォルトの名無しさん
2006/09/18(月) 16:06:36環境:RedHat(pthread)
下記のようなスレッド生成エンジン部分を扱っています。
#define TH_GEN_MAX 10
int ret;
pthread_t thid[TH_GEN_MAX];
int ret_th[TH_GEN_MAX];
int i;
for(i=0;i!=TH_GEN_MAX;i++){
if((ret=pthread_create(thid[i], NULL, (void*)TH_MAIN(void*), (void*)TH_ARGV)) !=0){
ErrExit();
}
}
TH_MAINでは、iの値で処理をスイッチさせるようになっています。
前まで論理CPU1個の環境でこれを走らせていて、子スレッドが確実にiの値を
判別してうまく処理をスイッチ出来ていたのですが、ミューテクス使わないのはまずい
だろと言われたので、mutex_lock/unlockを追加しようと思います。
思ったのですが、うまいタイミングが思いつきません。
感じ的には、生成するスレッドは生成直前にlock、生成後にunlock
生成されたスレッドは実行開始直後にlock、iの値を確実に取得した後unlock
で問題ないかと思うんですが、どうでしょう。。。
0186デフォルトの名無しさん
2006/09/18(月) 16:14:43どうやってんだか分からないのだが
0187デフォルトの名無しさん
2006/09/18(月) 16:31:45<<---
switch(i){
case(0):
>>---
FUNC0;
break;
以下略
}
になってるだけです。
<<---でlock
>>---でunlockかなと思ってます。
0188デフォルトの名無しさん
2006/09/18(月) 17:11:45振り分けるのなら、その変数の読み書きの前後でロック・アンロックすればいい。
これは全てのスレッドで行う必要がある。
0189デフォルトの名無しさん
2006/09/18(月) 21:37:310190デフォルトの名無しさん
2006/09/18(月) 21:41:24ローカルなら排他も糞もないだろうし。
0191デフォルトの名無しさん
2006/09/18(月) 21:43:480192デフォルトの名無しさん
2006/09/18(月) 23:17:42実際のプログラムはもっとまともな名前・・・だといいな・・・
0193デフォルトの名無しさん
2006/09/18(月) 23:22:04親:lock
親:i=0代入
親:スレッド0生成
親:unlock
子0:lock
子0:i==0で分岐
子0:unlock
親:lock
親:i=1代入
親:スレッド1生成
子1:lock ← unlock待ち
親:unlock
子1:i==1で分岐
子1:unlock
↓たいていこうなる
親:lock
親:i=0代入
親:スレッド0生成
親:unlock
親:lock
親:i=1代入
親:スレッド1生成
親:unlock
子0:lock
子0:i==1で分岐 ← wwwwwww
子0:unlock
子1:lock
子1:i==1で分岐
子1:unlock
0194デフォルトの名無しさん
2006/09/18(月) 23:25:39class Event {
public:
Event() { flag = false; }
void notify();
void wait();
private:
bool flag;
pthread_mutex_t mutex;
pthread_cond_t cond;
};
void Event::notify() {
pthread_mutex_lock(&mutex);
flag = true;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
}
void Event::wait() {
pthread_mutex_lock(&mutex);
if (!flag) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
}
親はスレッドを作るたびに wait、子は i による分岐を終了した後に notify
間違っていても謝らない
細かいところは自分で直せ
0195デフォルトの名無しさん
2006/09/18(月) 23:31:21スレッド起動時に引数で渡したほうが楽じゃね
0196デフォルトの名無しさん
2006/09/18(月) 23:39:31pthread_createで渡されるのは i のポインタだぞ
0197デフォルトの名無しさん
2006/09/18(月) 23:44:11親:lock
親:i=0代入
親:スレッド0生成
親:unlock
親:lock
親:i=1代入
親:スレッド1生成
親:unlock
親:スレッド終了 ← i がスタックから消える
子0:lock
子0:i で分岐 ← 実体が無い、テラヤバス
子0:unlock
子1:lock
子1:i==1で分岐 ← もうだめぽ
子1:unlock
0198デフォルトの名無しさん
2006/09/19(火) 00:00:48i(){}
0199デフォルトの名無しさん
2006/09/19(火) 00:08:06なぜわざわざポインタ経由で渡すw
値で渡せば問題ないでしょ
0200デフォルトの名無しさん
2006/09/19(火) 07:35:06処理の分岐はメインスレッドでと書いておるぞ。
0201デフォルトの名無しさん
2006/09/19(火) 07:44:07どこに?
0202デフォルトの名無しさん
2006/09/19(火) 07:46:140203デフォルトの名無しさん
2006/09/19(火) 07:47:20>>202は>>200へのレス。
0204デフォルトの名無しさん
2006/09/19(火) 16:18:04今C++を使ってます。
コンパイラはBorland C++ 5.5.1 for Win32 です。
C標準ライブラリとC++標準ライブラリと名前空間に関することで
聞きたいのですが、
#include <stdio.h>
でincludeすると、名前空間を指定しないで
識別子を参照でき、
#include <cstdio>
でincludeすると
std::printf();
のように使わないといけないと本で読みました。
しかし、std::をつけると
Error E2451 test.c 5: Undefined symbol 'std' in function main
Error E2379 test.c 5: Statement missing ; in function main
となってしまいます。
cstdio.hをエディタで見てみても
using std{}
のような箇所は見当たらないのですが、
なぜですか?
0205デフォルトの名無しさん
2006/09/19(火) 16:19:45using std{}
ではなくて
namespace std{・・・}
です。
0206デフォルトの名無しさん
2006/09/19(火) 16:36:37拡張子がcだからCのソースとしてコンパイルされている。
拡張子をcppなどにすればC++としてコンパイルされ、その本のとおりになる。
あと、<cstdio>をインクルードするからと言っても、
実際にcstdioやcstdio.hというファイルが存在しなければならないわけではない。(規格書にもそう明記されている)
Borland C++の場合はプリプロセッサが適当に処理している。
0207デフォルトの名無しさん
2006/09/19(火) 16:57:34ありがとうございます。
解決しました。
0208デフォルトの名無しさん
2006/09/20(水) 02:25:55>実際にcstdioやcstdio.hというファイルが存在しなければならないわけではない。(規格書にもそう明記されている)
そーだったのか。
知らなかった。
0209デフォルトの名無しさん
2006/09/20(水) 02:40:23包まれているようで、実は漏れているしな。
std::を付けても付けなくてもエラーは出ない。
0210デフォルトの名無しさん
2006/09/20(水) 02:52:25>包まれているようで、実は漏れているしな。
それ、漏れてるんじゃなくって互換性のために漏らしてるんじゃね?
少なくともVCとgccのそれは作為的だったはず。
0211デフォルトの名無しさん
2006/09/20(水) 07:58:47てか、stdをつけることになってるから
つければいいんでね? std くらいたいしたことない
0212デフォルトの名無しさん
2006/09/20(水) 08:52:591998年の規格では漏れてもいい事になってて、C++0xでは見直す方向に
ある。
0213デフォルトの名無しさん
2006/09/20(水) 08:58:260214デフォルトの名無しさん
2006/09/20(水) 09:25:45int func(){return 1;}
};
と
class X{
int func();
}
int X::func(){return 1;}
を相互に変換できる定番のプログラムとかあったらおしえてください。
0215デフォルトの名無しさん
2006/09/20(水) 09:29:580216デフォルトの名無しさん
2006/09/20(水) 11:41:11Math.sin みたいで逆にいい感じ。
この際 std:printf でいいかなと思うけど。コロン1つね。
0217デフォルトの名無しさん
2006/09/20(水) 11:45:550218デフォルトの名無しさん
2006/09/20(水) 12:18:20http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#456
0219デフォルトの名無しさん
2006/09/20(水) 12:39:35一応言っておくが、<stdio.h>や<iostream>とか全ての標準ライブラリのヘッダに当てはまるからな。
0220デフォルトの名無しさん
2006/09/21(木) 05:27:14そーだったのか。
ますます知らなかった。
つーか普通にK&Rに書いてあるじゃん。
おらびっくりしただよ。
0221デフォルトの名無しさん
2006/09/21(木) 08:30:360222デフォルトの名無しさん
2006/09/21(木) 09:28:120223デフォルトの名無しさん
2006/09/21(木) 12:49:230224デフォルトの名無しさん
2006/09/21(木) 13:26:100225デフォルトの名無しさん
2006/09/22(金) 00:04:16ry
using namespace std;
using namespace hoge;
とあった時に、例えばmainの中で
::foo();
fooがstdとhogeの両方である関数としても、foo()は常に名前空間がstdの方で解釈されるのでしょうか?
0226デフォルトの名無しさん
2006/09/22(金) 00:06:13あの情報っていったい何に使われているんでしょうか?
0227デフォルトの名無しさん
2006/09/22(金) 00:09:06だったらどうやってグローバルなfooを参照するんだよカスが
どんだけ無能なんだ
0228デフォルトの名無しさん
2006/09/22(金) 00:15:00いいえ。
::fooと限定してやると、グローバルな名前空間の中からしか名前を探さない。
usingディレクティブで指定された名前空間は探す対象にならない。(using宣言なら対象になるが)
仮にfooと書いてあったとして、stdとhoge両名前空間にfooという関数があったら、
曖昧ということでエラーになる。(ただし引数などが異なれば多重定義となり問題ない)
usingディレクティブは使うなと言われるのはこのため。
0229デフォルトの名無しさん
2006/09/22(金) 00:19:28テキストファイルのデータ
0001
0002
0003
0004
0005
までのHit.txtがあります。
それを下の構文で
std::fstream Fs("Hit.txt",std::ios::in | std::ios::out );
short readnum = 0;
std::streampos post;
Fs >> readnum;
//Fs.tellp();
Fs << "tp" << flush;
実行してみたんですが、Fs.tellp()が無い場合はテキストの内容が全く変わらず
Fs.tellp()を入れたら
0001tp0002
0003
のように変化します。
tellp()って現在位置を取るものですよね?
どういう動きでこういう結果になってしまうのかご教授願えないでしょうか。
0230デフォルトの名無しさん
2006/09/22(金) 00:43:44構造体を拡張した場合の互換性の為。
サイズが一種のバージョン情報になる。
0231デフォルトの名無しさん
2006/09/22(金) 00:55:52再現しないぞ。環境は何?
0232デフォルトの名無しさん
2006/09/22(金) 01:01:00環境というのは、VC++の設定のことでしょうか?
このプログラムはVCのWin32アプリケーションの空白の雛形に
コーディングしたものです。それ以外は特にいじってはいないつもりなんですが。
今ファイル入出力の勉強というかツール作りのためにやっているので
他はあまり触っていないです。
0233デフォルトの名無しさん
2006/09/22(金) 01:16:56結論を先に言うと、tellp()の後書き込みを行ってテキストファイルの
内容が変化するとは標準では決められていない。
std::ios::in | std::ios::outのオープンモードは、対応するCのオープン
モードでは"r+"であり、読み←→書きを切り替える前にファイルポインタ
をシークしなければならない。
だから、Fs.seekg(std::ios::beg); 等を行えば、書き込みが可能になる。
なお、ご存じのようにC++では読み取り用と書き込み用のファイルポインタ
は別々であり、いきなりstd::ios::curを指定してもうまくいかない。
0234デフォルトの名無しさん
2006/09/22(金) 01:25:54ご回答ありがとうございます。
ということは、つまり一度読み込みするたびに
seekgなどで位置を調整して書き込み再度位置を調整して読み込み
という処理を繰り返さなければいけないということになるのでしょうか。
あと
>ご存じのようにC++では読み取り用と書き込み用のファイルポインタ
>は別々であり
この件ですが、
ttp://www.kab-studio.biz/Programing/Codian/iostream/04.html
こちらのサイトのほうでも勉強させていただいてるんですが
こちらでは、
『このように std::fstream では、読み取りポインタと書き込みポインタが同じように扱われます。
これは、単なるポインタではなく「ファイルポインタ」を操作しているからなのです。』
という風な説明がありましたもので、あまり意識せずにseekp,seekgを適当に使ってたんですが
どういう風に理解したらいいものでしょうか?
0235デフォルトの名無しさん
2006/09/22(金) 01:49:02あるコードがあって、
short型の変数hogeに0100 0000 1001 0010という値が入っていて、
1111 1111をアンドすると
0100 0000 1001 0010
& 1111 1111
___________________________
0100 0000 1001 0010
になりますが、この結果をchar型hugaに入れています。
これってhugaに1001 0010が入るのは分かるのですが、
変数から溢れたりしないのでしょうか?
2バイトの値に1バイトの値をアンドすると、アンドされなかった部分は無視されるのでしょうか?
0236デフォルトの名無しさん
2006/09/22(金) 01:50:10>ということは、つまり一度読み込みするたびに
>seekgなどで位置を調整して書き込み再度位置を調整して読み込み
>という処理を繰り返さなければいけないということになるのでしょうか。
これはC言語も同じだったと思います。読み込み→書き込みの時は、
EOFにファイルポインタが達している時以外はfseek()もしくはrewind()、
書き込み→読み込みの時は常にfseek()またはrewind()の呼び出しが
必要でした。
std::fstreamがファイルポインタを一つしか持たないというのは私も
知りませんでした。std::stringstreamも同じようです。これは私のミスです。
済みません。
規格書を見ると、seekp(pos)もseekg(pos)もrdbuf->pubseekoff(pos)を
実行するように書いてあり(§27.6.1.3.38と§27.6.2.3.2)、確かに同じようです。
0237236
2006/09/22(金) 01:56:52みます。
但し、読み書きを切り替える時にシークが必要なのは間違いないです。
0238デフォルトの名無しさん
2006/09/22(金) 02:02:26C言語の知識もあやふやなもので大変勉強になりました。
常にfseekという発想が持てなかった物で大変助かりました。
アドバイスをいただいた上で力づくですが
std::fstream Fs("Hit.txt",std::ios::in | std::ios::out );
short readnum = 0;
std::streampos post;
int cnt = 0;
#if 1
while( 1 )
{
if( Fs.eof())
//if( 1 )
{
Fs.seekp( 6*cnt,ios::beg );
Fs << setfill('0') << setw(4) << readnum*10 << endl;
break;
}
Fs >> readnum;
Fs.seekp( 6*cnt,ios::beg );
Fs << setfill('0') << setw(4) << readnum *10 << endl;
cnt++;
}
#endif
を実行しましたら
0010
|
0050
と反映されました。とりあえずこれでいこうかと思います。
0239デフォルトの名無しさん
2006/09/22(金) 02:07:08うまくいってよかったですね。私も勉強になりました。
もしかしたらもっとスマートな書き方があるのかもしれませんが、
完全に分かるまで調べてみようと思います。
0240デフォルトの名無しさん
2006/09/22(金) 02:18:45別々に扱われるようです。seekp()とseekg()が同じなのはstd::fstreamだけの
ようです。
std::stringstream s("00010002000300040005");
char buf[100];
std::cout << s.str() << std::endl;
s.seekp(std::ios::beg);
s.seekg(4, std::ios::beg);
s.read(buf, 4);
buf[4] = '\0';
std::cout << buf << std::endl;
s.write("ffff", 4);
s.seekg(std::ios::beg);
s.read(buf, 4);
buf[4] = '\0';
std::cout << buf << std::endl;
0241デフォルトの名無しさん
2006/09/22(金) 02:21:59よって結果が異なるというのは、pubseekpos()関数が仮想関数であり、
呼び出すクラスによって動作を切り替えているという事なのでしょう。
規格票にこの事が詳しく書かれていればいいのですが、今のところ
見つけられずにいます。もし詳しい方がいらっしゃったらぜひ教えて下さい。
0242デフォルトの名無しさん
2006/09/22(金) 06:05:55>になりますが、
なりますか?
0243デフォルトの名無しさん
2006/09/22(金) 10:14:12これは、アンドすることで、2バイトの変数の
下8ビットを切り分けている処理なんです。
で、不思議だなと思って。
たぶん、hugaが1バイトのポインタだから出来るんですかね?
0244デフォルトの名無しさん
2006/09/22(金) 10:25:412進数の11111111、つまり16進数で0xFFというのは
2進数の0000000011111111のこと。
その上で、>>235をもう一度考えてみ。
まあ、その後にcharに代入してるなら、
この結果自体はあまり関係ないだろうけどね。
0245デフォルトの名無しさん
2006/09/22(金) 11:32:160100 0000 1001 0010
& 0000 0000 1111 1111
___________________________
0000 0000 1001 0010
になるわけですね。
んで、char型のポインタに代入だから、1001 0010になると。
0100 0000 1001 0010
& 1111 1111
___________________________
0100 0000 1001 0010
上の自分が勘違いしてた奴でも、結局Char型のポインタに代入だから1001 0010
になるのは変わらないけれど、このコードの大事なところは、上8ビットが
アンド演算で0000 0000にしている事だと。
なんで下8ケタだけはいるのかというと、
char型のポインタはMOV BYTEだから、上四桁は無視されると。
0246デフォルトの名無しさん
2006/09/22(金) 11:39:56shortをcharに代入する時、型キャストしないと「変換後の精度が失われる」
のようなコンパイラ警告が表示されなかった?
0247デフォルトの名無しさん
2006/09/22(金) 11:58:19char型へのポインタはMOV BYTE [番地]だと習ったので、
メモリの中で
番地0 1001 0010
番地1 0100 0000
みたいな感じになって、番地が1バイト分読みとられる意味になってキャストの警告はでないと思っていました。
さらに質問なんですけれども、
0xFFが0000000011111111になって計算されると言うのは、
異なる型同士で演算すると、大きい方の型に合わせて演算されるという理由からでしょうか?
それとも、0x00ffといちいち書くのが面倒だから、省略したのでしょうか?
0248デフォルトの名無しさん
2006/09/22(金) 11:59:53なまじアセンブラをかじってるから、
(レジスタではない)メモリ上の変数をそう呼びたくなるのかもしれないが
アセンブラでも、変数は変数だ。
アドレスを保持する変数をC/C++ではポインタまたはポインタ変数と呼ぶだけ。
もし、*を使ったポインタで参照している中身のことを言っているのだとしても
それはやはり変数(配列変数かもしれない)であって、ポインタではない。
もちろん、ポインタの配列等はあるが、それはでもchar型のポインタとは言わない。
0249デフォルトの名無しさん
2006/09/22(金) 12:02:52算術変換を勉強するといい。
演算時のcharとshortはどちらもintに昇格されてから計算される。
警告が出るか出ないかはコンパイラ次第。規格にはないから。
0250デフォルトの名無しさん
2006/09/22(金) 13:40:500251デフォルトの名無しさん
2006/09/22(金) 14:10:48EXE側のソースコード
#include <stdio.h>
#include <windows.h>
class TestP{
public:
virtual ~TestP(){}
virtual void Suicide() = 0;
virtual void TestFunc() = 0;
};
typedef TestP* (*PFunc)();
0252デフォルトの名無しさん
2006/09/22(金) 14:11:45HINSTANCE hLib;
TestP* Temp = NULL;
PFunc MyFunc = NULL;
hLib = LoadLibrary("HOGE.dll");
if(hLib){
MyFunc = (PFunc)GetProcAddress(hLib, "CreateInstance");
}
else{
printf("HOGE.dllの取得に失敗;\n");
}
if(MyFunc){
Temp = MyFunc();
}
else{
printf("CreateInstanceの取得に失敗;\n");
}
if(Temp){
Temp->TestFunc();
Temp->Suicide();
}
FreeLibrary(hLib);
return(getchar());
}
0253デフォルトの名無しさん
2006/09/22(金) 14:12:25#include <stdio.h>
#include <windows.h>
class TestP{
public:
virtual ~TestP(){}
virtual void Suicide() = 0;
virtual void TestFunc() = 0;
};
class TestC : public TestP{
public:
TestC(){
printf("こんすとらくた(TestC);\n");
}
~TestC(){
printf("ですとらくた(TestC);\n");
}
void Suicide(){
printf("すいさいど(TestC);\n");
delete(this);
}
void TestFunc(){
printf("てすとふぁんく(TestC);\n");
}
};
0254デフォルトの名無しさん
2006/09/22(金) 14:14:50__declspec(dllexport) TestP* WINAPI CreateInstance(){
return(new TestC);
}
}
上記のコードで、VS.NET2003ではDLLとEXE間のクラス受け渡しに成功しました。
ところが、BCCでDLLをコンパイルするとTestC::Suicide()のdelete(this)でエラーが発生します。
(アクセス違反です)
何故か、また回避する方法は存在するのでしょうか?どなたか、教えて頂ければとorz
0255デフォルトの名無しさん
2006/09/22(金) 14:17:040256デフォルトの名無しさん
2006/09/22(金) 14:20:43していません、異なるコンパイラ間で動作させる為のテストなので。
delete(this)で引っ掛かるという事は、恐らくはメモリ配置等の問題なのでしょうけれど…。
解決策が分からないのですorz
0257デフォルトの名無しさん
2006/09/22(金) 14:21:480258デフォルトの名無しさん
2006/09/22(金) 14:24:17クラスを諦めてCの構造体同様のレガシーな構造体にするか、
いっそOCXにでもするしか、コンパイラの壁を越えることはできないかと。
0259デフォルトの名無しさん
2006/09/22(金) 14:26:33あと
typedef TestP* (*PFunc)();
↓
typedef TestP* (WINAPI *PFunc)();
0260デフォルトの名無しさん
2006/09/22(金) 14:28:27デフォの呼び出し規約が違うかも試練。
0261デフォルトの名無しさん
2006/09/22(金) 14:32:52使った事は一度もないな。いつもCの呼び出し規約に合わせていた。
0262デフォルトの名無しさん
2006/09/22(金) 14:36:28がはっ、そうでしたかorz
delete(this)以外は正常に呼び出されているのですが、vtblの構造の差異によるアクセス違反とかが発生しているのでしょうか?
>258
成る程です、異なるコンパイラ間でクラスは共有できないのですね。
という事は、クラスを諦めるかBCC等でのプラグイン作成を認めないか…後者の方が楽な選択ですねorz
>259
実はその部分、DLL側のソースコードがVC++からのコピペでは一発で通らず、
慌てて貼り付けたので関数ポインタ側の修正を忘れていたりしたのですorz
御指摘、有難う御座います。
>260
そうですね、面倒ではありますがこれもバグ回避の為ですorz
ついでに、もうひとつ質問させて頂きます。
同一コンパイラの同一ランタイムでクラスの受け渡しは可能ですが、異なるコンパイラでは不可能です。
しかし、VC++シリーズ(っていうのも変ですが)内では如何なのでしょうか? 6.0は論外としても、.NETと.NET2003と.NET2005位は共通しておいて欲しいのですが………。
0263デフォルトの名無しさん
2006/09/22(金) 14:42:360264デフォルトの名無しさん
2006/09/22(金) 14:47:050265デフォルトの名無しさん
2006/09/22(金) 15:58:02ご指導ありがとうございます。
用語の使い方、気をつけます。
どうもありがとうございました。
0266デフォルトの名無しさん
2006/09/22(金) 21:34:13.NET と .NET2003 って vc7.0 と vc7.1 ってことですか?
この2つはメモリ管理以外は互換性があるようです。
3dx max のプラグイン開発をしたときに vc7.1 を使用しているプラグイン側で new したオブジェクトを
vc7.0 を使用している本体側で delete したときにメモリリークが発生する問題を解決するために
Autodesk の提供しているライブラリを組み込んだことがあって、その状態で問題なく動きました。
ソース: ttp://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=7481394 の max_mem.zip
0267デフォルトの名無しさん
2006/09/22(金) 21:58:000268デフォルトの名無しさん
2006/09/22(金) 22:18:07つーか >266 は virtual void Suicide() = 0;
をインタフェースに含むんだったら互換性に問題ないよっていう意味だし。
0269デフォルトの名無しさん
2006/09/24(日) 00:27:51こういう文字の配列があったとして
別の関数でabc[a][b]というような使い方がしたいのですが
このabcのアドレスを関数に渡して関数内で使用するには
どうしたらいいでしょう
普段はabc[0]みたいな感じで渡していたのでabcだけの場合
型をどうしたらいいのかわからないです。
0270デフォルトの名無しさん
2006/09/24(日) 00:36:28void Hoge(char abc[]);
abcは引数なので、名前は何でも良い。
ただし、配列の要素数は関数側で特定出来ない。よって、
void Hoge(int Num, char abc[]);
のように、要素数も引数として渡すべし。
0271デフォルトの名無しさん
2006/09/24(日) 00:39:11二次元の場合は、
void Hoge(char abc[][16]);
といった感じで渡せばOK。
注意点としては、配列の「後ろの方」だけは要素数を書かなければならない点。
0272デフォルトの名無しさん
2006/09/24(日) 00:45:000273デフォルトの名無しさん
2006/09/24(日) 00:56:51例えば
char abc[64];のアドレスを渡して関数使う場合は
hoge(char *abc) {
abc
}
こんなので出来ますよね?
それを
char abc[10][64];
こういうの関数内で
hoge(???????abc) {
abc[1]
}
こういったように参照して使いたいのですが
アドレスの渡し方がいまいちわからなくて
0274デフォルトの名無しさん
2006/09/24(日) 00:59:470275デフォルトの名無しさん
2006/09/24(日) 01:03:400276デフォルトの名無しさん
2006/09/24(日) 04:03:52すみません今頃になってようやくわかりました。
配列のアドレス表示させるサンプル作って気がついたんですけど
文字列の場合勝手にポインタになると勘違いしてました。
だから要素数とか言ってたんですね
おかげで出来ましたありがとう
0277デフォルトの名無しさん
2006/09/24(日) 08:04:41if((fp == fopen(filename,mode)) == NULL)
{
printf("ファイルを開くことが出来ません:%s\n",filename);
exit(-1);
}
//処理
fclose(fp);
このファイルを開く時のエラー処理を毎回書くと行数無駄に増えて嫌なんですけど、
関数にするとしたらどんな感じしたらいいんでしょうか?
なるべくFILE *fpと fclose(fp)って部分をいじりたくないのですが。
void FileOpen(FILE *fp,char filename[256], char mode[3])
{
if((fp == fopen(filename,mode)) == NULL)
{
printf("ファイルを開くことが出来ません:%s\n",filename);
exit(-1);
}
}
というのを思いついたのですがこれだとFILE fp; FileOpen(&fp,"a.txt","r"); fclose(&fp);
となってしまって汎用性がないもので・・・
0278デフォルトの名無しさん
2006/09/24(日) 08:25:22を受け取るように関数を書き換えるんだ
0279デフォルトの名無しさん
2006/09/24(日) 08:56:24C++ 使うといいよ。
0280デフォルトの名無しさん
2006/09/24(日) 09:38:510281デフォルトの名無しさん
2006/09/24(日) 09:43:57なぜ?
0282デフォルトの名無しさん
2006/09/24(日) 09:50:070283277
2006/09/24(日) 09:52:500284デフォルトの名無しさん
2006/09/24(日) 09:56:17EXIT_FAILURE以外が渡った場合エラー終了扱いになるとは限らない。
EXIT_FAILURE定数は多くの場合1
0285デフォルトの名無しさん
2006/09/24(日) 10:01:43何の話をしてるのだ?
0287デフォルトの名無しさん
2006/09/24(日) 10:10:430288デフォルトの名無しさん
2006/09/24(日) 10:24:260289デフォルトの名無しさん
2006/09/24(日) 10:31:05走らせると、1〜10程度の値を返して、それで処理を分岐させたりする。
EXIT_FAILUREは標準で定義されているが、それを使わなければならない
道理はどこにもない。
0290デフォルトの名無しさん
2006/09/24(日) 10:35:57int *p=NULL;
とするのも
int *p=0;
とするのも人の勝手ということ?
0291デフォルトの名無しさん
2006/09/24(日) 10:48:58全然違う例えを引っ張ってこないように。
0292デフォルトの名無しさん
2006/09/24(日) 10:49:17それは自由だったと思う。
NULLが0で置き換え可能なのは保証されてる。
>>289
「使わなければならない」と「使うべき」は違うだろ。
0293デフォルトの名無しさん
2006/09/24(日) 10:53:33キャストしなければならない手間を防ぐためだしな。
Cではその点は問題ない。
0294デフォルトの名無しさん
2006/09/24(日) 15:00:42Cは、そんな仕様の言語だから。
でも互換性&可読性を考えれば、利用を推奨。
マジックナンバーは潰せ、って言うでしょ。
しかし重要なマクロだと個人的に思うけど、
何故stdio.hでなくstdlib.hなんだろう。
0295デフォルトの名無しさん
2006/09/24(日) 15:27:47重要でないとstdlib.hに入るというわけではないのだが。
0296デフォルトの名無しさん
2006/09/24(日) 15:32:130297デフォルトの名無しさん
2006/09/24(日) 15:51:21333AAA を 333AAA と全角で書いた場合は2倍になるという認識でいいんですよね?
0298デフォルトの名無しさん
2006/09/24(日) 15:55:19領域の確保などしない。
全角を使ったときの長さはエンコーディング依存。
0299デフォルトの名無しさん
2006/09/24(日) 17:24:47exe実行したら、一瞬Hello Worldってでてプログラムが強制終了される。
Developerの実行つかったら閉じる押すまで終了しないで正常なんだがなぜだろうか・・・
たぶん、プログラムじゃなくて漏れのPCが原因だと思うんだが・・
よかったら誰か教えてくれ・・・
http://www.uploda.org/uporg526158.zip.html
0300デフォルトの名無しさん
2006/09/24(日) 17:26:32コマンドラインから実行しろ
0301(^-^) ◆MONSOON/qo
2006/09/24(日) 17:29:07printf("Hello World!\nキー押してね");
int a=getchar();
に変更してみて
0302デフォルトの名無しさん
2006/09/24(日) 17:41:47なるほど!getchar関数を使うということですか。
実際にやってみるとできました。
アリガト!(´▽`)
>>300
コマンドラインから実行・・
漏れは初心者なのでその辺ぐぐったのですが分かりませんでした・・
よかったらおしえてくれます?
0303デフォルトの名無しさん
2006/09/24(日) 18:20:09でも同じようなことができる
コマンドラインは(すれ違い?)
ファイル名を指定して実行 → cmd で出てくる画面だが知らんのなら
調べるより help コマンド使って自分で弄ったほうが多分理解が早い
0304デフォルトの名無しさん
2006/09/24(日) 18:32:04プログラム → アクセサリ → コマンドプロンプト
実行ファイルがあるディレクトリへ移動して、実行
or
コマンドプロンプトの ウィンドウへ、 実行ファイルをドロップ
Enter
0305デフォルトの名無しさん
2006/09/24(日) 18:46:10int i;
std::string str;
};
という構造体を宣言する時に、デフォルトの値として
i=0, str = ""を入れておく、という事は出来ますか?
0306デフォルトの名無しさん
2006/09/24(日) 19:06:010307デフォルトの名無しさん
2006/09/24(日) 19:23:49動体視力いいな。
0308デフォルトの名無しさん
2006/09/24(日) 19:33:11std::map <std::string, foo> hoge;
という形で、mapのvalueとしてfooを使おうと思っているので、
各keyに対してそれをやるとめんどくさくて。
hoge["fuga"].i++;
とやった時に"fuga"が登録されてなければhoge["fuga"].iの値が1になればいいんですが…
やっぱり
if(hoge.find("fuga") == hoge.end()){
hoge[fuga].i = 0;
}
という処理を入れるしかないんですかね?
0309デフォルトの名無しさん
2006/09/24(日) 19:35:49コンストラクタで初期化すればいいじゃん
0311デフォルトの名無しさん
2006/09/24(日) 19:48:57operator [] で作成される要素は foo() で初期化されたものが使われるから、
何もしなくてもいい。試してみたの?
0312デフォルトの名無しさん
2006/09/24(日) 20:13:36std::mapとか使う前に、クラスの基本を勉強した方がいいよ。
0313デフォルトの名無しさん
2006/09/24(日) 20:26:28struct foo{
int i;
std::string str;
};
int main(void)
{
std::map <std::string, foo> hoge;
hoge["fuga"].i++;
std::cout << hoge["fuga"].i << "\t" << hoge["fuga"].str << std::endl;
return 0;
}
こんなテストプログラム書いてみたら、1245009と表示されて、思うような結果にはなりませんでした。
>>312
すみません、時間がないもので…後で必ずやります。
mapのコンストラクタを再定義するって事ですか?
0314デフォルトの名無しさん
2006/09/24(日) 20:34:08fooのコンストラクタだよ。311さんが言ってるfoo()もfooのコンストラクタってことだ。
コンストラクタの書き方がわからなかったら、それはちゃんと調べること。
あと、classとstructはほとんど同じ、ということも知っておいたほうがいい。
0315314
2006/09/24(日) 20:41:01struct fooを
class foo{
public:
foo();
~foo();
int i;
std::string str;
};
foo::foo(){
i = 0;
str = "";
}
って感じで書き直せばいいんですね。
ありがとうございました。
0316デフォルトの名無しさん
2006/09/24(日) 20:48:36別にstructのままでもコンストラクタは持てるよ。
0317デフォルトの名無しさん
2006/09/24(日) 21:01:05ほう。
コンパイラは何使ってる?
0318305
2006/09/24(日) 21:07:28>>316
そうなんですか。勉強になりました。
>>315のように書き直したらうまくいきました。
皆さん、ご教示どうもありがとうございました。
>>317
Visual Studio .NET 2005 Professional です。
iが初期化されてなかったんで、変な値が入ったんですね。
0320デフォルトの名無しさん
2006/09/24(日) 21:42:09313の挙動は規格に則った動作だのはずだが俺の勘違いか?
0321デフォルトの名無しさん
2006/09/24(日) 21:49:50C++ 2003 の改定で、 foo() で i も int() になるようになったはず。
value initialization という動作。
0322デフォルトの名無しさん
2006/09/24(日) 21:57:48げ、失念していた。
サンキュー。
0323デフォルトの名無しさん
2006/09/25(月) 00:25:34>>304
♪♪♪ d(`Д´)b♪♪♪サンキュ
いろいろと教えてくれてどもっす
何とか理解できました
あれからいろいろコマンドプロントについて調べて
コマンドプロントについてよく勉強できました
Cはあまり触れたことがなかったのだが、、
これからがんがんプログラム作って生きたいと思う
>>307
動体視力がいいわけじゃない・・www
漏れのPCのスペック (((´・ω・`)しょぼいだけさ・・
処理オチのおかげでで見えた
0324デフォルトの名無しさん
2006/09/25(月) 00:27:29いろいろ勉強できたっといったわりには
コマンドプロンプトをコマンドプロントと書いてしまった・・・orz
0325デフォルトの名無しさん
2006/09/25(月) 16:43:06大丈夫。
高校まで化学漬けだったおれは、
プログラムのグループのみんなの前で
コマンドプロトン
と言った。
0326デフォルトの名無しさん
2006/09/25(月) 17:03:460327デフォルトの名無しさん
2006/09/25(月) 17:09:23そのうちコマンドフロイトとかちんことかまんことか言い出す奴が出るねんで。
0328デフォルトの名無しさん
2006/09/25(月) 17:37:47今はboostのコンパイルが終わらなくて暇です
0329デフォルトの名無しさん
2006/09/25(月) 20:58:250330デフォルトの名無しさん
2006/09/26(火) 08:24:57「stdio」は「スタンダードアイオー」、つまり「標準入出力」だ罠。
0331デフォルトの名無しさん
2006/09/26(火) 08:31:49ざわ・・・
この流れでマジレスっ・・・!
ざわ・・・
0332デフォルトの名無しさん
2006/09/26(火) 09:14:550333デフォルトの名無しさん
2006/09/26(火) 09:41:190334デフォルトの名無しさん
2006/09/26(火) 09:56:170335デフォルトの名無しさん
2006/09/26(火) 10:01:120336デフォルトの名無しさん
2006/09/26(火) 16:32:190337デフォルトの名無しさん
2006/09/26(火) 16:39:00stdio.hファイルの方をリネームすればOK
0338デフォルトの名無しさん
2006/09/27(水) 11:46:09しかし、プログラムを実行する方法が
VisualC++の開発画面上でコンパイルする方法しか解りません
VisualC++がインストールされていないPCで
普通にアプリケーションとして起動させるにはどうすればいいのでしょうか?
つまり
市販されているソフトなんかと同じような状態にしたいです
新しいPCにプログラムをインストールして実行という感じで
0339デフォルトの名無しさん
2006/09/27(水) 12:10:27exe ファイルをコピーして実行すればいいんじゃね?
もう一度言う。
「やりたいこと」と「やったこと」と「どうなったのか」を全部
正確に書くように。
あと誘導されてきたんならその旨書くぐらいしとけ。
0340デフォルトの名無しさん
2006/09/27(水) 13:58:110341デフォルトの名無しさん
2006/09/27(水) 14:07:180342デフォルトの名無しさん
2006/09/27(水) 14:41:21スタートボタンで実行できるようにするためにはどのようなコマンドを追加してスタートボタンに関連付ければいいでしょうか?
一応スタートボタンを押すと動く。という単純動作は出来ております。
0343デフォルトの名無しさん
2006/09/27(水) 15:01:050344デフォルトの名無しさん
2006/09/27(水) 15:31:33ビルド設定に「Release」ってのないか?
0345デフォルトの名無しさん
2006/09/27(水) 18:50:50意味がわからん。
>スタートボタンを押すと動く。という単純動作は出来ております
とあるのに、
>スタートボタンで実行できるようにするためには
>どのようなコマンドを追加してスタートボタンに関連付ければいいでしょうか
この質問が発生する理由がさっぱりわからん。
スタート メニューディレクトリをSHGetSpecialFolderPathあたりで取って、
exeへのショートカット放り込むだけじゃねーのか?
0346デフォルトの名無しさん
2006/09/27(水) 21:45:52もの凄く素朴な疑問なんですけど、main関数なんかで、return 0とかreturn 1
とか返す場合って、あれはどういう意味があるんですか?
0は正常終了で、1は異常終了とか聞いたことがあるんですが、
そもそも、0とか1とかはどこで使ってるんですか?
初めから、0→正常とかってコンパイラ?が判断してくれるために書いてる??
たまにreturn -1とかもあるし.....
支離滅裂な質問だと思うんですけど、アドバイスお願いします<(_ _;;)>
0347デフォルトの名無しさん
2006/09/27(水) 21:50:12コマンドラインで実行する場合などに、
戻り値を受け取って、結果によって挙動を変えたりできる。
exeを、ブラックボックスとして機能する一関数として見ればわかりやすい。
0348デフォルトの名無しさん
2006/09/27(水) 21:51:48spawn()系の関数で子プロセスを呼び出した時に戻される値にもなる。
0349346
2006/09/27(水) 21:56:04普通の関数の場合、戻り値を受け取って、挙動を変えるってのは分かるのですが、
main関数ってreturnを受け取ると、そこでプログラムは終了しちゃいますよね。
それなのに戻り値を要求してるのが納得いかないというか.....
見当違いのことを言ってたらすみません.....
0350346
2006/09/27(水) 21:57:19すみません(^^;;
超初心者なので、おっしゃってる意味が......orz
皆さんありがとうございます。
0351デフォルトの名無しさん
2006/09/27(水) 22:01:57プログラムが関数を呼んで戻り値を受け取るのと同じで、
OSがプログラムを呼んで、その戻り値を受け取ってるって考えるのはどうかな
0352デフォルトの名無しさん
2006/09/27(水) 22:08:14例えば、TV録画ソフトがある。このソフトは指定された時間に起動し、
録画を終了したらアプリを終了する。
一方、録画管理ソフトがある。このソフトで、録画履歴を見られる。
この一覧で「録画成功」「録画失敗」などと表示するときはどうすればいいだろう?
そう、TV録画ソフトのmainのreturnで成功か失敗かを返せばいい。
まあ、そんな感じ。
0353346
2006/09/27(水) 22:10:04なるほど!よく分かりました。どうもありがとうございました。
何度も申し訳ないですが、最後に一つだけ質問させて下さい。
stdio.hなどを初めにインクルードすると思うのですが、
どれがどの関数を含むのか分からないので(たまにエラーがでるので)、
適当に本に載ってたヘッダファイルを10個くらいコピペして、インクルードしてます。
これって何か問題あるのでしょうか?
というか、わざわざヘッダファイルを分割している意味がよく分からないです.....
0354デフォルトの名無しさん
2006/09/27(水) 22:17:13わざわざファイルを分割しているのは、全部ひとつにまとめたら大きくなるからw
どれをインクルードすればいいか分からない場合は、その都度マニュアルを調べるべし。
慣れてくれば、よく使う関数がどのヘッダファイルを必要とするのか覚えるだろう。
0355デフォルトの名無しさん
2006/09/27(水) 22:22:06分割してない場合を考えてみよう。
全く使わんものまでどかんとインクルードされるわけだ。
ひょっとすると予想外のマクロや定数などを踏んでまずいことになるかもしれない。
また、シンボル名も衝突するかもしれない。
そうでなくても生成されるバイナリの量が増えたり、コンパイル時間が長くなったりする。
あと、どこに何があるか知らんなら「標準Cライブラリ」でぐぐれ。
Unix-likeな環境なら、man 3 printfなどとしてマニュアルを引くと載ってる。
0356346
2006/09/27(水) 22:25:58詳しく教えてくださりありがとうございます。
そうですよね、慣れなきゃいけないですよね。
これからはその都度、調べるようにしてみます。
言われてみれば、確かに>>355のような危険性はありますよね。
皆さん、どうもありがとうございました!
0357デフォルトの名無しさん
2006/09/28(木) 18:55:02/usr/bin/printf というコマンドがあった…
こんなコマンドあったのね><
0358デフォルトの名無しさん
2006/09/28(木) 19:04:530359デフォルトの名無しさん
2006/09/28(木) 20:36:360360デフォルトの名無しさん
2006/09/28(木) 22:13:260361デフォルトの名無しさん
2006/09/28(木) 22:41:16これを任意のデリミタで分割し、検索のためのデータ構造をつくりたいのですが、どんな構造が
適しているのでしょうか?
Linux / Unix上で動作させたいと思います。
0362デフォルトの名無しさん
2006/09/28(木) 22:45:310363361
2006/09/28(木) 23:10:59リストは、
/home/hoge/sample/xxxxx/
/home/hoge/sample/zzz/
/var/log/message/
/tmp/hoge/
/home/hoge2/ero/ura/
…
となっていて、検索対象の文字列もパス形式で与えられるような状態にし、
パスの構成要素を単位として前方一致の検索をかけたいのです。
0364デフォルトの名無しさん
2006/09/28(木) 23:17:480365361
2006/09/28(木) 23:34:21パトリシア木の方がいい感じかも。
サンプルコードはLISPばっかりでわからん。C言語でのサンプルがホスィ。
茶茎は読んでもどうなってるのかわかんねーや。
0366(^-^) ◆MONSOON/qo
2006/09/29(金) 00:00:07第一階層
1=home
2=var
3=tmp
第二階層
1=hoge
2=log
3=hoge2
として/home/log/なら4進数21を対応させ、/home/なら4進数1を対応させる
/tmp/hoge/なら13とする
そして配列にリストの番号をふっておけば一発で求まる
0367(^-^) ◆MONSOON/qo
2006/09/29(金) 00:09:49リストが次のものだけとする
/1/
/1/2/
/2/2/1/
/2/3/
/3/
/3/1/2/3/
このとき
a[1]=1
a[9]=2
a[26]=3
a[14]=4
a[3]=5
a[231]=6
その他は0とする
するとディレクトリのある場合は何番目か、ないかが決定できる
0368デフォルトの名無しさん
2006/09/29(金) 06:45:04ホント、無駄なことに頭使うの好きだなぁ。
0369デフォルトの名無しさん
2006/09/29(金) 07:01:53誰か止めろよ。
0370デフォルトの名無しさん
2006/09/29(金) 07:03:55環境:VC6
次のプログラムで試行錯誤の結果
Cスタイルのキャストでは(void*)にキャストしてからdelete[]が可能なのに
C++スタイルのキャストでは、無理でした
これは仕様のせいなんでしょうか
それともVC?
あまり良くわかってないので、コンパイル通るコードも
const_cast版はちゃんと動作してくれてるのか心配で
結局CスタイルのTCHAR*へのキャストでお茶を濁しています
0371デフォルトの名無しさん
2006/09/29(金) 07:04:31int main(){
LPCTSTR str = new TCHAR[MAX_PATH];
str = "iyou";
//この3つはコンパイル可
delete[] const_cast<TCHAR*>(str);
//delete[] (TCHAR*)str;
//delete[] (void*)str;
//以下全てエラー
//delete[] str;
//delete[] (const char*)str;
//delete[] static_cast<TCHAR*>(str);
//delete[] dynamic_cast<TCHAR*>(str);
//delete[] reinterpret_cast<TCHAR*>(str);
//delete[] static_cast<void*>(str);
//delete[] dynamic_cast<void*>(str);
//delete[] reinterpret_cast<void*>(str);
//delete[] const_cast<void*>(str);
return 0;
}
0372デフォルトの名無しさん
2006/09/29(金) 07:16:54>C++スタイルのキャストでは、無理でした
>これは仕様のせいなんでしょうか
ちゃんと考えろ。
voidの配列って存在すると思うか?
出来なくて当然。
delete[] str が通らないのは、単にLPCTSTRが
const char* ないしはconst wchar_t*でtypedefされているから。
ついでに、
LPCTSTR str = new TCHAR[MAX_PATH];
str = "iyou";
この時点でnewされた内容は失われている。
ぶっちゃけメモリリーク。
strの中身は文字列リテラルを指していて、delete[]した瞬間何が起きても不思議じゃない。
strへのコピーにはstrcpy()あたりを使え。
JavaとかSTLとかの知識がごっちゃになってないか?
一度落ち着いて整理した方がいいぞ。
0373デフォルトの名無しさん
2006/09/29(金) 07:27:13えっと、voidの配列があったらサイズがわからないから
正しくdeleteできなさそうですね・・
そう言われてみたらむしろコンパイルが通るのが逆に不思議
仕様であろうとなかろうと使わないほうがよさげ・・かな
それにしても、これメモリリークだったとは^^;
いい勉強になりますた
そういうのがきちんとわかるように精進したいと思います
0374デフォルトの名無しさん
2006/09/29(金) 08:23:22TCHAR って何か分かってるか?
0375デフォルトの名無しさん
2006/09/29(金) 16:04:11初心者の典型的なコードだな。
0376デフォルトの名無しさん
2006/09/29(金) 16:33:590377デフォルトの名無しさん
2006/09/29(金) 22:04:260378デフォルトの名無しさん
2006/09/29(金) 22:11:00C++スタイルのキャストでは const_cast 以外のキャストで定値性を消すことは出来ません。これはC++の仕様です。
ついでに delete や delete[] に渡す前にポインタの定値性を消す必要はありません。これもC++の仕様です。
重要なのは delete[] に渡すポインタの静的な型と new[] で指定した型が(const, volatile 修飾を除いて)
一致していない場合、動作未定義となることです。VC6〜8 の場合 delete[] に void* を渡すとデストラクタを
スルーして単なるメモリブロックの開放のみ行うため、メモリはリークしないのにその上に乗っかっている
リソースはリークするという厄介なバグの原因になります。
後アドバイスとして、月並みですが new[] ではなく std::vector や std::basic_string を使いましょう。
#include <windows.h>
#include <tchar.h>
#include <string>
typedef std::basic_string<TCHAR> tstring;
# べ、別に惚れたっていって欲しいんじゃないんだからねっ!
0379デフォルトの名無しさん
2006/09/30(土) 02:36:37EXE側でファイルのオープン/クローズを行います。
{
FILE* stream = fopen("Hoge.txt", "wb");
}
{
fclose(stream);
}
で、それに対しDLL側ではFILE*を利用し読み書きを行います。
(FILE*は引数などで受け取ったものとします)
{
fwrite(略);
};
このコードが同一バージョン違いコンパイラ、あるいは異種コンパイラで動作する保証はありますでしょうか?
(要は、FILE構造体の構造ってどのコンパイラでも同一になる様にされているのかを窺いたく)
0380デフォルトの名無しさん
2006/09/30(土) 02:38:32互換性はありません。
0381デフォルトの名無しさん
2006/09/30(土) 03:51:58#include <iostream>
#include <string>
#include <cstdlib>
#include <new>
using std::string;
using std::cout;
using std::cerr;
using std::nothrow;
//文字列を操作するmyclassの定義
class myclass{
private:
string str;
char *pchar, *pwork, *pold;
int len;
myclass(){}
myclass(const myclass &mobj){}
myclass &operator=(const myclass &mobj){}
0382デフォルトの名無しさん
2006/09/30(土) 03:52:36//1引数付きコンストラクタ
myclass(const char *pstr) : str(pstr)
{
//char型の動的な配列を作成する
const int size = static_cast<int>(str.length());
//sizeを指定して配列を割り当てる
//nothrowで、newのメモリ割り当て時失敗してもbad_allocをなげずNULLを返す。
//pwork,pcharにそれぞれヒープからメモリを割り当てる
pwork = pchar = new(nothrow) char[size + 1];
if(pchar == NULL){
cerr << "メモリ割り当てエラー";
exit(1);
}
//文字列をコピーする
strcpy(pwork, str.c_str());
len = strlen(pwork);
}
0383デフォルトの名無しさん
2006/09/30(土) 03:53:08//領域再割り当てを行うメンバ関数
char *realloc(const char *pstr)
{
//メモリーリーク領域へのポインタを保存
pold = pchar;
//strに文字列を代入しておく
str = pstr;
//char型の動的な配列を作成
const int size = strlen(pstr);
//sizeを指定して配列を割り当てる
pwork = pchar = new(nothrow) char[size + 1];
if(pchar == NULL){
cerr << "メモリ割り当てエラー";
exit(1);
}
//文字列をコピーする
if(false == strcpy(pwork, pstr)){
cout << "文字列コピーエラー \n";
return NULL;
}else{
len = strlen(pwork);
}
//メモリーリーク領域へのポインタを返す
return pold;
}
0384デフォルトの名無しさん
2006/09/30(土) 03:53:37const char *getstr(){ return pwork;}
//デストラクタ
~myclass(){
cout << "デストラクタ \n";
delete [] pchar;
}
//c型文字列長さ
int strlen(const char *cstr)
{
int i;
for(i = 0; cstr[i]; i++)
;
return i;
}
//c型文字列のコピー
bool strcpy(char *out, const char *in)
{
if( strlen(out) < strlen(in)){
cout << "コピー無理 \n";
return false;
}else{
while(*out++ = *in++)
;
return true;
}
}
0385デフォルトの名無しさん
2006/09/30(土) 03:54:30myclass *adress(myclass *mobj)
{
return mobj;
}
};
int main()
{
char *pchar = NULL;
{
myclass mcarray[] = {"今日も", "良い日で", "幸せで", "楽しく"};
const int size = sizeof mcarray / sizeof(myclass);
int i;
//mcarrayの要素を表示
for(i = 0; i < size; i++){
cout << mcarray[i].getstr() << ' ' << mcarray[i].adress(&mcarray[i]) << ' ';
}
cout << '\n';
0386デフォルトの名無しさん
2006/09/30(土) 03:56:090387(^-^) ◆MONSOON/qo
2006/09/30(土) 03:57:090388デフォルトの名無しさん
2006/09/30(土) 04:49:00/*
reallocメンバ関数で、新たに割り当てられた領域は
古い割り当て済みの領域を解放せずに新しい領域を新たに
割り当てる。そのため、delete演算子をつかってメモリを
解放するが、古い割り当てられたメモリが残っており
メモリーリークがおこる。
*/
if(NULL == (pchar = mcarray[0].realloc("明日も")))
cout << "再割り当て失敗 \n";
//mcarrayの要素を表示
for(i = 0; i < size; i++){
cout << mcarray[i].getstr() << ' ' << mcarray[i].adress(&mcarray[i]) << ' ';
}
cout << '\n';
}
if(pchar == NULL){
cout << "とりあえず失敗 \n";
}else{
cout << "ブロックスコープを抜け出した \n";
cout << "すべてのオブジェクトは解放されているはず \n";
cout << "[メモリーリークとなった領域] : " << &pchar << pchar << '\n';
}
return 0;
}
0389デフォルトの名無しさん
2006/09/30(土) 04:53:290390デフォルトの名無しさん
2006/09/30(土) 09:32:360391デフォルトの名無しさん
2006/09/30(土) 09:35:32同一コンパイラ同一CRTでも、CRTがスタティックリンクだとダメなんじゃなかったっけ。
0392デフォルトの名無しさん
2006/09/30(土) 09:35:510393デフォルトの名無しさん
2006/09/30(土) 10:10:16そのstrcpyはねえだろ。
たしかにoutには十分なメモリが確保してあるものの、
全て0埋めしてあったら、コピー無理になるだろ。
0394デフォルトの名無しさん
2006/09/30(土) 11:10:080395デフォルトの名無しさん
2006/09/30(土) 11:47:140396デフォルトの名無しさん
2006/09/30(土) 12:21:36ありがとうございます、という事は関数でラップしなければならないのですねorz
うわぁ、やな感じorz
0397デフォルトの名無しさん
2006/09/30(土) 13:44:05リンクしたいのはComctl32です。
今は
g++ -Comctl32 -o test.exe test.cpp
です。
0398デフォルトの名無しさん
2006/09/30(土) 13:57:31g++ -o test.exe test.cpp -lComctl32
0399デフォルトの名無しさん
2006/09/30(土) 13:58:26仮に、libsome.aなんてライブラリがあれば-lsomeでリンクできるが。
mingw使うことになるだろうし、検索してみたら?
0400デフォルトの名無しさん
2006/09/30(土) 14:39:07最近のCygwinはMinGW相当も持っていて、
libcomctl32.aがあったりするんだな。
0401デフォルトの名無しさん
2006/09/30(土) 15:50:22ごく基本的な「画面に文字を表示する」部分でつまづいております。
どんな感じで操作すればいいのか、ざっと流れ的なのを説明していただければ幸いです。
(とりあえずHELLO WORLDとウィンドウに表示させるレベルまで)
ちなみにVC++Net 2003、OSはXPです。
0402(^-^) ◆MONSOON/qo
2006/09/30(土) 16:10:11コンパイルの設定をWindowsアプリケーションにかえてから
次を実行してください
#include <windows.h>
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hPreInst,
LPSTR pCmdLine,int nCmdShow)
{
MessageBox(NULL,"Hello, World","タイトル",MB_OK);
return 0;
}
0403デフォルトの名無しさん
2006/09/30(土) 16:43:070404デフォルトの名無しさん
2006/09/30(土) 17:30:35リソースエディタでStaticTextを貼り付けて、そこに件の文字を書くのではダメ?
>402のやり方はダイアログに出力するいちばん簡単な手順だけどMFCとはなんの関係もないコードだしね。
0405401
2006/09/30(土) 17:46:47テキストにはネットの入門サイト(猫含む)
あと秀和システムの逆引き大全使ってますが、
やはりちゃんとした本買わないと駄目ですかね・・・
0406338 です
2006/09/30(土) 18:03:03ネットや書籍もかなり調べました
どなたか、どうかお願い致します
>>344 リリースビルドという物は仕様として存在するようなのですが
それが在るはずのダイアログで
「Project Win 32 el」としか表示されていません
>>339 exeファイルという意味もわからないくらいの初心者ですが
一応ファイルの構成はこうです
--単体のファイル--
・プロジェクトファイル(.dsp)
・プロジェクトワークスペース(.dsw)
・CPPソースファイル (.cpp)
・リソースファイル (.rc)
---複数のファイル--
・ヘッダーファイル (.h)
・WAVファイル (.wav)
・MIDIファイル (.midi)
0407デフォルトの名無しさん
2006/09/30(土) 18:04:090408デフォルトの名無しさん
2006/09/30(土) 18:28:11文字を出力することにこだわらず、まともな入門書か入門サイトの通りにやれば?
少なくとも、>402も>404も理解できない人間が自己流だなんて虫が良すぎる。
0409デフォルトの名無しさん
2006/09/30(土) 18:40:34>>339
このスレは質問者の幅が広いですねー
0410デフォルトの名無しさん
2006/09/30(土) 18:49:260411デフォルトの名無しさん
2006/09/30(土) 18:54:120412デフォルトの名無しさん
2006/09/30(土) 18:55:24Windowsアプリケーションを選んでプロジェクトを作り、
.cppのソースをプロジェクトに加えてビルドするということ。
0413デフォルトの名無しさん
2006/09/30(土) 18:57:21全然違う。ウンコしに行って帰ってきたほど違う。
0414デフォルトの名無しさん
2006/09/30(土) 18:58:38VC6はこんな感じでできたと思う。
�@アクティブな構成をRelaeseにする
�Aビルトする
�Bプロジェクトフォルダ下Releaseフォルダにあるxxxx.exe
を対象のPCにコピー
�Cxxxx.exeを開く
401
MFCには「標準出力」「文字出力」はない。
対象のクラスよってに表示方法がちがう。たとえば
CxxxxViewなら
OnDraw()でTextOut()する。またはDrawText()する。
0415デフォルトの名無しさん
2006/09/30(土) 19:05:02すみません、よくわからないです。
つまりincludeするファイルがウンコしに行って終わったら帰るって事ですか?
ウンコじゃなくてもっと解りやすいものに例えてほしいです。
0416デフォルトの名無しさん
2006/09/30(土) 19:12:140417デフォルトの名無しさん
2006/09/30(土) 19:17:150418デフォルトの名無しさん
2006/09/30(土) 20:09:40上のプログラムについて質問です。
char型のテスト用malloc/freeを作ったのですが、
なぜMalloc側はMallocReturnで、戻り値を代入しないとうまくいかなくて、
Free側はFreeReturnで、戻り値を代入しなくてもうまくいくのでしょうか。
0419はい
2006/09/30(土) 20:14:310420デフォルトの名無しさん
2006/09/30(土) 20:16:39freeしたら用済みだから、それを返す必要は無い。
Mallocがうまくいかないのは、これがうまくいかないのと同じ理屈。
#include <stdio.h>
void hoge(int n)
{
n = 777;
}
int main(void)
{
int x = 666;
hoge(x);
printf("%d\n", x);
return 0;
}
0421デフォルトの名無しさん
2006/09/30(土) 20:19:23char **strにして、*strにmallocの戻り値を代入したらうまく行く。
0422418
2006/09/30(土) 20:29:22理解しました。
0423デフォルトの名無しさん
2006/09/30(土) 20:32:18class Test でメンバ変数 m_flag を宣言して
if(条件) m_flag = 1;
else m_flag = 0;
と変数に値を代入しておきます。
これを別のクラス class Main で
Test fg
if(fg.m_flag == 1) 処理1;
else 処理2;
というふうに別のクラスで変更した値を見るにはどうすればいいですか?
このままだとfgに何も入ってないので正しく動作しません。
メンバ変数をpublicで宣言してポインタを使うとできますか?
0424デフォルトの名無しさん
2006/09/30(土) 20:33:41クラス共通変数にしたいのならstaticクラス変数を使えばどう?
0426デフォルトの名無しさん
2006/09/30(土) 20:40:39Test に bool Flag() const { return m_flag; } でも足せば?
実際はもっと意味のある名前にしとけよ。
0427デフォルトの名無しさん
2006/09/30(土) 20:42:18コンストラクタでTest& fg として、元のクラスを参照で持たせておくか
ポインタを持って初期化しないと意味ないよ。
クラスは金太郎飴だからね。
friend使ったりアクセサ(この場合はread専用)を使ったりする。
0428デフォルトの名無しさん
2006/09/30(土) 21:13:29漏れなら、
class Main に Test *fg; を置き
Testクラスにm_flagをread onlyするパブリックメンバー関数を加える
0429423
2006/09/30(土) 21:31:37いろいろ知らない言葉があってぐぐったりしてみたんですが
アクセサ、readonlyというのは
いわゆるGet〜というような関数のことですか?
実際にコードを書いていただけると幸いです。
(できれば特にポインタを使う部分を)
0430デフォルトの名無しさん
2006/09/30(土) 21:37:23未だに何がしたいのか良く分からんのだが。
>>423 の「変数に値を代入」はどこに書いてるんだ?
Test のコンストラクタで書いとけば、 >>423 の下のコードでも問題なさそう。
メンバ関数に書いてるんなら fg.m_flag を見る前に呼び出しとけばいい。
0431デフォルトの名無しさん
2006/09/30(土) 21:37:35class Test {
bool m_flag;
public:
Test(bool b = false) : m_flag(b) {}
void set_flg(bool b) { m_flag = b; }
bool get_flg() { return m_flag; }
};
class Main {
Test& fg;
public:
Main(Test& f) : fg(f) {}
void abc() {
if (fg.get_flg())
std::cout << "flag is true" << std::endl;
else
std::cout << "flag is false" << std::endl;
}
};
int main()
{
Test t;
Main m(t);
std::cout << std::boolalpha << t.get_flg() << std::endl;
m.abc();
}
0432デフォルトの名無しさん
2006/09/30(土) 21:44:33(GMail DiskやPGP DiskやDaemon Toolsのようなもの)
を作りたくてDDKをインストールしたんだが
どのサンプル見るのがよさそう?
なんか解説してくれてるありがたいサイトないかい?
0433デフォルトの名無しさん
2006/09/30(土) 21:46:220434デフォルトの名無しさん
2006/09/30(土) 21:47:20デバイスドライバについて勉強しろ
0435デフォルトの名無しさん
2006/09/30(土) 21:48:53氏ね
>>434
わかった
0436デフォルトの名無しさん
2006/09/30(土) 22:34:44あとSoftICEとか使わないとデバッグが大変だと思う
0437デフォルトの名無しさん
2006/09/30(土) 22:37:380438デフォルトの名無しさん
2006/09/30(土) 22:39:340439デフォルトの名無しさん
2006/09/30(土) 23:10:56void* func(void* arg);
void * func(void * arg);
C でどれがスタンダード?
スペースをタブに置き換えても見易いのはどれ?
0440デフォルトの名無しさん
2006/09/30(土) 23:12:27一番上。
そこでタブを使う人はほとんどいないでしょう。(つまり、使うな)
0441デフォルトの名無しさん
2006/09/30(土) 23:26:010442デフォルトの名無しさん
2006/09/30(土) 23:35:57int* ptr, ptr2;
とやって、ptrがint型になってしまうのに気づかなくてエラー連発していた
頃が懐かしい。
かと言ってreturn* this; はやり過ぎだし。
0443デフォルトの名無しさん
2006/09/30(土) 23:44:15変数側の属性だろって頭でわかってても、
ポインタ型って考えた方がしっくりくること多いからなー。
最後のは無いだろう。
0444デフォルトの名無しさん
2006/09/30(土) 23:46:44これでまだ戸惑うなら、未だに初心者じゃないかな?
0445デフォルトの名無しさん
2006/09/30(土) 23:47:580446デフォルトの名無しさん
2006/10/01(日) 00:12:13さすがに、return* this;は見たこと無いというか、宣言でしかやらないだろ、普通。
0447デフォルトの名無しさん
2006/10/01(日) 00:16:46今こうやってるけど真ん中に変えようかなと思ってる
0448デフォルトの名無しさん
2006/10/01(日) 00:18:12int*
をイントピーって読んでて、(int型のポインタ)型だと思ってた俺ガイル
(´・ω・)恥ずかしいス
0449デフォルトの名無しさん
2006/10/01(日) 00:18:400450デフォルトの名無しさん
2006/10/01(日) 00:18:52だなー。今更変える気も無いし。
0451デフォルトの名無しさん
2006/10/01(日) 00:51:32俺は真ん中だが、これそもそもやりだしっぺは誰なんだ?
0452デフォルトの名無しさん
2006/10/01(日) 00:58:240453デフォルトの名無しさん
2006/10/01(日) 00:59:39は偶にあるな
0454デフォルトの名無しさん
2006/10/01(日) 01:00:50これで無問題
0455デフォルトの名無しさん
2006/10/01(日) 01:01:47どうすればてっとりばやく中身みれますか?
0456デフォルトの名無しさん
2006/10/01(日) 01:02:35中身?
何を期待してるの?
0457デフォルトの名無しさん
2006/10/01(日) 01:03:20PEフォーマットの仕様書みれ
0458デフォルトの名無しさん
2006/10/01(日) 01:03:220459デフォルトの名無しさん
2006/10/01(日) 01:04:28ソースコードはEXEには普通書かれてません//
0460デフォルトの名無しさん
2006/10/01(日) 01:05:21とりあえず>>457さんの言っているPEフォーマットの仕様書とやらを見ればいいのでしょうか?
0461デフォルトの名無しさん
2006/10/01(日) 01:08:06全くの初心者さんが、何を理由にしてVC突っ込んでEXEの中身見ようとしたのかわからんです
とりあえずあなたのやろうとしてることは、あなたにとって無理が大きすぎるのは確かなので諦めてください
それよりなぜ逆コンパイルしようとおもったのか書くといいかもしれません
0462デフォルトの名無しさん
2006/10/01(日) 01:09:070463デフォルトの名無しさん
2006/10/01(日) 01:12:03それより初心者なのに自分でexeみてウィルスかどうかどうやって判断するんだよ
0464デフォルトの名無しさん
2006/10/01(日) 01:13:06とりあえずアンチウィルスソフト使ってみて、何もなければ諦めることだね
きっとEXEの中身がどーのこーのを思いつくあなたでは、色々無理
0465デフォルトの名無しさん
2006/10/01(日) 01:13:560466デフォルトの名無しさん
2006/10/01(日) 01:16:52ウイルスじゃなくてゲーム内で勝手に喋ったりするものでした
0467デフォルトの名無しさん
2006/10/01(日) 01:17:39これも最近見慣れてきたけどなぁ
時々、自分もこう書いてしまうときがある
0468デフォルトの名無しさん
2006/10/01(日) 01:29:36誰が始めたスタイルなんだろう?
0469デフォルトの名無しさん
2006/10/01(日) 01:36:430470デフォルトの名無しさん
2006/10/01(日) 05:42:24ウイルスみたいになってしまうからな。
エラーチェックの為に入れていたが、えらいことになった。
0471デフォルトの名無しさん
2006/10/01(日) 07:44:18タスクトレイから操作するアプリも注意した方がいい。
0472デフォルトの名無しさん
2006/10/01(日) 10:52:13この表記は、 pthread.h だ!
俺の不確かな記憶抜粋
0473デフォルトの名無しさん
2006/10/01(日) 12:32:01デストラクタを呼び出す方法ってないよな?
struct leak{
static leak* get(){return new leak();}
operator int(){return 1;}
};
int main(){
int is_leak = *leak::get(); //上側:deleteできん。メモリリーク
leak* no_leak = leak::get(); //下側:deleteできる。
delete no_leak; //メモリリークなし
return 0;
}
0474デフォルトの名無しさん
2006/10/01(日) 12:35:570475デフォルトの名無しさん
2006/10/01(日) 12:36:250476デフォルトの名無しさん
2006/10/01(日) 13:24:430477デフォルトの名無しさん
2006/10/01(日) 13:38:20シュールだな
0478384
2006/10/01(日) 13:40:39>>393さんが指摘下さった部分で
すべて0埋めしてあったらコピーが無理になるというのは
newでバッファを割り当てた時の中身が0で埋まってたら
(先頭アドレス内容じゃなくても途中でも0があったら)
無理ということで理解して良いでしょうか。
間違ってたら、すいませんが教えて下さい。
0479デフォルトの名無しさん
2006/10/01(日) 13:41:390480デフォルトの名無しさん
2006/10/01(日) 13:44:38たぶん>>384の
> if( strlen(out) < strlen(in))
がいけないかと
outが0埋めされてたら、strlen(out)は0になるよね
で、ifの中に入れなくてコピーもされない
0481デフォルトの名無しさん
2006/10/01(日) 13:51:120482デフォルトの名無しさん
2006/10/01(日) 20:33:120483デフォルトの名無しさん
2006/10/01(日) 20:39:41C だと、前者は引数の型や数を指定しない宣言で、後者が引数なしを指定する宣言。
C++ ならどちらも同じで、 C での後者と同じ意味。
0484デフォルトの名無しさん
2006/10/01(日) 21:32:39#include<stdio.h>
int main(void){
return (EXIT_SUCCESS);
}
である。
main(){
}
のようにしない理由を答えよ。
これにどう答えていいのかさっぱりわからないのですが、どなたか
素人の僕にもわかるように教えてください
0485デフォルトの名無しさん
2006/10/01(日) 21:34:30・プロセスは戻り値を明示的に返す方が好ましいよおにいちゃん
0486デフォルトの名無しさん
2006/10/01(日) 21:40:22上のプログラムは正しくない。
- stdio.h のインクルードは必要ない
- stdlib.h のインクルードが必要 (EXIT_SUCCESS のため)
0487デフォルトの名無しさん
2006/10/01(日) 21:52:21>>485ごめんなさい、まだわからなくて本当にごめんなさい。
0488デフォルトの名無しさん
2006/10/01(日) 22:04:27同じ質問を繰り返したら誰か答えてくれるとでも思ってるのか?
今までの反応を省みて質問を考え直すか、消えるかのどっちかにしろ。
0489デフォルトの名無しさん
2006/10/01(日) 23:55:110490デフォルトの名無しさん
2006/10/02(月) 01:25:04今、VC++でプログラミングしてるんですが、
ダイアログボックスから変数を持って行きたい時はどうすればいいですか?
例えば
ダイアログボックスで
次の数の二乗を算出します
とか書いてユーザに入力を求めて、そしてユーザが入力したら
その値を元に計算→出力
的な感じなんですが…
0491デフォルトの名無しさん
2006/10/02(月) 01:29:51このコピペはやってるの?
0492デフォルトの名無しさん
2006/10/02(月) 01:30:350493デフォルトの名無しさん
2006/10/02(月) 08:19:18Javaスレとか、意味不明に酷いな。
>>490
>ダイアログボックスから変数を持って行きたい
日本語でおk
入力をどうやって、どこから得るのかとか、どこに出力するのか、とか
詳細がさっぱりわからないんだが、
GetDlgItemIntでぐぐってみるのはどうだろう。
0494デフォルトの名無しさん
2006/10/02(月) 12:53:14ネットで似たようなプログラムを探して、下記のプログラムを見つけました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2688.txt
しかし、このプログラムの実行の仕方がわからないのです。
コンパイルして、実行するとコマンドプロンプトが出るだけなのです。
初心者なものですいません。どなたか教えていただけませんか?
たぶん、tagの情報をグルーピングしているプログラムだと思います。
よろしくお願いします。
0495デフォルトの名無しさん
2006/10/02(月) 13:10:44何やら標準入力から10項目のcsvを取り込んで、tagIDごとにファイル出力しているようだが。
取り敢えずコマンドインタプリタで標準入力を取り込みたいcsvファイルにリダイレクトすればいいんじゃね?
#つーか、ここはソフトの使い方すれでもなければ環境の使い方スレでもないんだけどなぁ。
0496デフォルトの名無しさん
2006/10/02(月) 13:14:40ttp://pc8.2ch.net/test/read.cgi/tech/1158844912/118
ttp://hp28.0zero.jp/diary/see_diary.php?dir=569&num=1&uid=akiyu0901&hiduke=20060925&now=0
0497デフォルトの名無しさん
2006/10/02(月) 14:17:27すいません!初心者なので、ぜんぜん分かりません。
リダイレクトとはどうやるのですか?
コマンドプロンプトに何を入力すれば、ファイルのグルーピングがされ
テキストが作成されるのですか?
>>496
正解です。
0498デフォルトの名無しさん
2006/10/02(月) 15:38:34ちょっとしたゲームみたいなの作りたいんだけどどうすればいいですか?
0499デフォルトの名無しさん
2006/10/02(月) 16:30:542688.txtをコンパイルしてできた実行モジュールが2688.exeならば、
2688 < recv_20550606162223.log
でOK。
0500デフォルトの名無しさん
2006/10/02(月) 16:32:07手軽なところで、Hit&Blowなんてどうでしょう。
fgets()を使えてprintf()を使えるなら作れるでしょう。
0501デフォルトの名無しさん
2006/10/02(月) 21:50:15標準入力で入力された最後5行を表示するプログラム
コマンドから入力、列は固定で行は固定ではない
0502デフォルトの名無しさん
2006/10/02(月) 21:53:190503デフォルトの名無しさん
2006/10/02(月) 22:02:070504デフォルトの名無しさん
2006/10/02(月) 22:36:57どんなコードか忘れてしまいました。確かビット演算か何かしてたような気がするんですが
わかる方いませんか?
0505デフォルトの名無しさん
2006/10/02(月) 22:39:060506501、2
2006/10/02(月) 22:41:44お願いします
0507デフォルトの名無しさん
2006/10/02(月) 22:47:31hoge = (hoge==false);
0508デフォルトの名無しさん
2006/10/02(月) 22:56:34sage ^= 1; // 微妙
0509デフォルトの名無しさん
2006/10/02(月) 23:08:12そう言われて必死に色々参考書読みまくってたら解決しました。
0510501、2
2006/10/02(月) 23:16:370511501 ◆8zHol6NAOo
2006/10/03(火) 00:46:040513デフォルトの名無しさん
2006/10/03(火) 01:07:420514デフォルトの名無しさん
2006/10/03(火) 01:14:120515デフォルトの名無しさん
2006/10/03(火) 01:29:20日本語でOK
コンストラクション時に値が決まって、以降内部でも値を動かさない変数が欲しいって話だろうか。
class A
{
const int cv;
...
みたいなことをしたいなら、コンストラクタの初期化子で初期化すれば大丈夫だぞ。
上の例なら
A::A():
cv(12345)
{}
みたいな。
0516デフォルトの名無しさん
2006/10/03(火) 01:38:28(そうだとして)それが整数型でなければ、他の静的変数同様定義を書き、そこで初期化すればよい。
0517デフォルトの名無しさん
2006/10/03(火) 01:41:580518デフォルトの名無しさん
2006/10/03(火) 01:45:50「ぐあい」ね、「具合」。
>>513
包み紙。対象物を直接利用せず、共通I/Fを与える目的などで間接的に利用することなど。
0519デフォルトの名無しさん
2006/10/03(火) 19:22:00一画面にコントロールを318個(うちスタティックテキストは72個)作りたいのですが、
途中で作れなくなってしまいます。
リソースエディタを使わずに直接rcファイルを書き換えると作れるのですが、
リソースエディタでコントロールをダブルクリックしても新規メンバを作れなくなってしまいます。
なんとか250個以上のコントロールをつくれないでしょうか?
本来は画面設計をしなおして画面を分ければいいので作ってみたのですが、
実際の操作盤と同じような見た目にしたいという強い要望なので、
それに答えられないかなぁと思い質問した次第です。
よろしくお願いします。
0520デフォルトの名無しさん
2006/10/03(火) 19:26:310521デフォルトの名無しさん
2006/10/03(火) 19:49:25仮引数にはint a[]とint *aと二通りに書けますが、
二次元配列int a[3[5]を関数に受け渡す時には引数に配列名を渡すと
int a[][5]という書き方とは別にポインタっぽく書くとどう書いたら良いのでしょうか。
int *a[5]かと思ったのですが『問題のあるポインタの変換』と
エラーになってよく分からないのでどなたか教えてください。
0522デフォルトの名無しさん
2006/10/03(火) 19:57:050523519
2006/10/03(火) 20:24:40そうですね。自分でそう言っていました。
コントロールを作る方法じゃなくて、
「リソースエディタでコントロールを作る方法」か
「rc直書きで作ったコントロールをリソースエディタでダブルクリックして関数を作る方法」
を聞きたかったんですが、
よくよく考えたら、クラスウィザードから作ればよかったんですね。
ありがとうございました。
0524デフォルトの名無しさん
2006/10/03(火) 21:57:21int (*a)[5]
0525デフォルトの名無しさん
2006/10/03(火) 22:13:06うわぁあありがとうございますっ!!!
出来た、出来ました!!
昨日からずっと考えててポインタの本読んだりしてもint *a[5]
ってなると思ったらそういうことでしたか!
>>269も見たのですが自分の知りたいポインタ風にするってことが分からなくて悩んでました。
出来てホントに嬉しいです!心からありがとうございます!(´;ω;`)ブワッ
0526デフォルトの名無しさん
2006/10/03(火) 22:41:43まだ今はわからないかもしれないけど、ちょっとだけ説明しておく。
int *a[5]では、*演算子よりも[]演算子の優先度の方が高いので、
int *(a[5])と解釈される。これは大きさ5のint型へのポインタ配列と
なって意味が違ってしまう。
int (*a)[5]は、int型の大きさ5の配列へのポインタとなり、通常の
二次元配列 a[3][5]は、コンパイラ内部ではすぐにこの形に変換
され利用される。Cでは一番左側の次元以外の大きさを省略でき
ないのはこのためである。
0527デフォルトの名無しさん
2006/10/03(火) 22:42:42宣言時に”演算子”を突っ込まない方がいいんでね?
実際演算子じゃないし
0528デフォルトの名無しさん
2006/10/04(水) 00:04:29「宣言子演算子」という名の立派な演算子だが何か?
0529デフォルトの名無しさん
2006/10/04(水) 00:10:55ttp://www.google.co.jp/search?complete=1&hl=ja&q=%22%E5%AE%A3%E8%A8%80%E5%AD%90%E6%BC%94%E7%AE%97%E5%AD%90%22&lr=
どっかにソースあるならおすえて
0530デフォルトの名無しさん
2006/10/04(水) 00:21:50お前の言ってる事は筋が通ってるから、>>527の戯言は許してやれ。
0531デフォルトの名無しさん
2006/10/04(水) 02:27:060532デフォルトの名無しさん
2006/10/04(水) 12:58:55言語はCでお願いします。
コマンドプロンプトを開きます。
C:\Documents and Settings\Owner>cd "\Program Files\TagLocator2005\Sample\bin"
C:\Program Files\TagLocator2005\Sample\bin>LpsRecvSample /C:1 9876 1000 1 1
*** SPACEキー押下で受信開始/終了 *** _/*ここでスペースを押します。*/
*** 受信開始 ***
_/*ここから1時間後にもう一度スペースを押す。*/
*** 受信終了 ***
*** 平均受信0件/秒 ***
以上の操作をプログラムで自動的にやりたいです。
0533デフォルトの名無しさん
2006/10/04(水) 13:01:53プログラム作成依頼か?ならお断りだ。
0534デフォルトの名無しさん
2006/10/04(水) 13:05:46「以上の操作」のどれをプログラムでやりたいんだ?
まさか、プログラムでスペースキーを押したいだけか?
0535デフォルトの名無しさん
2006/10/04(水) 13:35:21以下の操作すべてです。
�@コマンドプロンプトを開く。
�AC:\Documents and Settings\Owner>とでたら
�Bcd "\Program Files\TagLocator2005\Sample\bin"と入力。
�CC:\Program Files\TagLocator2005\Sample\bin>とでたら
�DLpsRecvSample /C:1 9876 1000 1 1と入力。
�E*** SPACEキー押下で受信開始/終了 *** とでたらスペース入力。
�F1時間後にもう一度スペース入力。
このような操作です。
お願いします。
0536デフォルトの名無しさん
2006/10/04(水) 13:42:250537デフォルトの名無しさん
2006/10/04(水) 16:14:28何を「お願い」してるんだ?
0538デフォルトの名無しさん
2006/10/04(水) 17:00:37関数呼び出し規約に関してですが、__cdeclはC/C++の標準規約、__stdcallはWindowsAPIの標準規約とあります。
で、DLLから呼び出せるようにする関数は__stdcallにしておくべきとありますが、__cdeclでも問題はないのでしょうか?
勿論、C/C++から呼び出す事のみを前提にした場合の話ですが…どなたか、教えて頂ければと(礼
0539デフォルトの名無しさん
2006/10/04(水) 17:03:20(礼
特にこの表現が気に食わない
0540デフォルトの名無しさん
2006/10/04(水) 17:07:15お前はうつ病だろ。速く死ねよ!
0541デフォルトの名無しさん
2006/10/04(水) 17:08:410542デフォルトの名無しさん
2006/10/04(水) 17:09:120543デフォルトの名無しさん
2006/10/04(水) 17:10:44ところで、おまえの神経質はキモイ。
早く死んでくれないか?
0544538
2006/10/04(水) 17:10:57ありがとうございます
>540
お前誰だよw
0545538
2006/10/04(水) 17:11:290546デフォルトの名無しさん
2006/10/04(水) 17:12:00呼び出される側がDLLをまたぐなら、__stdcallにしとけ、スタックがおかしくなるぞ。
DLL内なら、好きにしる。
0547デフォルトの名無しさん
2006/10/04(水) 17:12:14おまえ、もう初潮は来たか?
0548デフォルトの名無しさん
2006/10/04(水) 17:12:160549538
2006/10/04(水) 17:15:04ありがとうございます、という事はDLLからの可変長引数な関数は呼び出し不可でしょうか?
DLL・EXE側共にC/C++なら__cdeclで渡せると思ってましたorz
>547
秘密です
>548
勘違い防止用です
0550デフォルトの名無しさん
2006/10/04(水) 17:16:09おまえも速く死ねよ。
0551デフォルトの名無しさん
2006/10/04(水) 17:18:36だから、お前はしつこいんだよ。
しつこいとまた神経質な奴が出て来るぞ!!
0552デフォルトの名無しさん
2006/10/04(水) 17:20:18だから、お前はしつこいんだよ。
しつこいとまた神経質な奴が出て来るぞ!!
0553デフォルトの名無しさん
2006/10/04(水) 17:21:03出没しております。注意!!
0554デフォルトの名無しさん
2006/10/04(水) 17:24:060555538
2006/10/04(水) 17:28:08ちなみに私のレスは>538と>544、>549とこのレスのみです。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/dllusage.htmlの記述によりますと、
「他言語からもこの関数を呼び出したい場合は__stdcallにする必要がある」とありますので、
C/C++からの呼び出しに限れば__cdeclは使えそうです(とはいえ、明示されてないのが気になりますが)
0556デフォルトの名無しさん
2006/10/04(水) 17:28:14user32.dll に wsprintf(A/W) がいて __cdecl 呼び出しの export できていているのだが…
「呼び出される側がDLLをまたぐ」 ということが具体的にどういうことを指してる?
DLL側のコード生成時に前提している呼び出し規約と
DLL関数呼び出し側で把握している呼び出し規約とが一致してないなら
スタック壊しそうだけど
0557デフォルトの名無しさん
2006/10/04(水) 17:39:05ここで質問するぐらい気にしているし、
お前はググッて調べたんじゃなかったのか?
後だしジャンケンは本当に嫌われるんだよなぁ。
ほんとキモイから、家で引きこもりやってろ!な!
0558デフォルトの名無しさん
2006/10/04(水) 17:44:340559デフォルトの名無しさん
2006/10/04(水) 17:46:450560豊臣秀吉
2006/10/04(水) 17:54:050561デフォルトの名無しさん
2006/10/04(水) 18:16:260562デフォルトの名無しさん
2006/10/04(水) 18:18:00Borland C++ コンパイラ 5.5.1使っています。
テキストファイルを一括して変数に取り込みたいのですが、
よくわかりません。
何か便利な関数とかないでしょうか?
一行一行を読み込んで、配列に追加していくしかないのでしょうか?
C言語2日目なので巧く質問になっていなかったらごめんなさい。
0563デフォルトの名無しさん
2006/10/04(水) 18:19:08ただ、coutは可変個機能が無いので、
stdargを使って自前に作っているが。
0564デフォルトの名無しさん
2006/10/04(水) 18:47:44char string[256];
string = ・・・何かの処理・・・
・・・以下略・・・
}
こんな感じでwhileの中に配列の宣言を入れていると
メモリをどんどんと食って行くのでしょうか?
0565デフォルトの名無しさん
2006/10/04(水) 18:49:160566デフォルトの名無しさん
2006/10/04(水) 18:53:26実際は最適化によって確保部分がループの外に出されて
使いまわされてるかもしれない
0567564
2006/10/04(水) 18:56:06回答をありがとうございます。
0568デフォルトの名無しさん
2006/10/04(水) 21:03:15char str[] = "我輩は猫である。";
とすると配列の長さをあわせてくれますが、
char *s;
s = (char *)malloc(100);
strcpy (s, "我輩は猫である");
この、文字列の長さに合わせて配列の長さを宣言したいのですが、
どうしたらよいでしょうか?
char str[] = s; とか char str[strlen(s)+1]; とかしても
型が変換できないというエラーが出るものでわかりません。
0569デフォルトの名無しさん
2006/10/04(水) 21:08:16配列のサイズはコンパイル時に定まっている必要がある。
変数sが指す文字列の長さはコンパイル時に分からないのだから無理。
(配列でないならmalloc(strlen(s)+1)とやればいい。)
0570568
2006/10/04(水) 21:29:43ありがとうございます。
配列の可変は無理なんですね。
C++ならば標準ライブラリにvectorというのを見つけて
良さそうだったのですが、ちょっと頭が追いついていません。
mallocやreallocを使ってポインタ操作でいきたいと思います。
回答をありがとうございました。
0571デフォルトの名無しさん
2006/10/04(水) 21:37:44そこをなんとかがんばってvectorやstringを使うとかなり楽だyo。
0572デフォルトの名無しさん
2006/10/04(水) 21:41:530573デフォルトの名無しさん
2006/10/04(水) 22:08:24領域が足りなくなったらreallocというのも非効率だから、文字列長+1で毎回きっちり確保するのではなく
あらかじめ十分な大きさで確保するというのも良いよ。
それなら固定長配列で十分な大きさを用意しておくというのもある。
「十分な大きさ」というのが決められるような用途でないと使えないけど。
こうすれば楽にできるケースもある、というだけのことだから、
reallocが悪いと言ってるんではないので、念のため。
初めのうちは、勉強のためにいろいろなやり方をやってみるのもいいよ。
0574568
2006/10/04(水) 22:18:53ご助言をありがとうございます。
C言語をはじめて3日ですので、まずは動くものを作ってから
そのあとに新しいスキルを使って改良などをしていきたいと思います。
実はポインタも何となく理解はしたのですが、まだまだ
考え方が身についていませんので、そっちからやってみたいと
思います。
まだまだ、覚えなきゃいけない基本的な所が多くて大変です。w
0575568
2006/10/04(水) 23:37:39strcpy (str, "0123456789");
str = (char *)realloc(str, sizeof(char)*17);
strcat (str, "ABCDEF");
printf ("%c\r\n", str[10]);
mallocで領域を確保した変数は配列として使えたんだ。
なんだか、まだまだわからん事ばかりだ・・・。orz
0576デフォルトの名無しさん
2006/10/04(水) 23:59:05printfなどで改行するつもりなら、\rは要らないぞ。
Cでは\nが改行を表す。
実際の改行コードが\nでない環境(Windowsなど)では、
外部との入出力時に変換がなされる(テキストモードのとき)。
0577デフォルトの名無しさん
2006/10/05(木) 02:11:11charの配列の中に、全角半角の英字数字漢字からなる文字列
char str{30] ="あ1いa2うA";
があったとき、この文字列の中から、
「全角半角英数字を取り出し、すべて半角英数字」にしたい
#上記の例であったとき取り出したい文字列は、"1a2A"です。
チェックする文字列が、半角のみや全角のみであれば
文字コードで見れそうなのですが、
半角と全角がランダムに混じっている文字列をチェックする方法がわかりません。
そのようなことができるメソッドなどあれば、ご教授ください。
0578デフォルトの名無しさん
2006/10/05(木) 02:56:23悪い、そんな便利なメソッドは標準には無い。
頭からスキャンして、半角か全角か判定した上で、
全角英数字をおもむろに手で変換してしまえ。
何、大した手間じゃない。
0579デフォルトの名無しさん
2006/10/05(木) 03:15:09クラス(あるいは構造体)においてコピーコンストラクタと代入演算子は定義せずともコンパイラが自動的に作成してくれます。
その際のコピーコンストラクタ及び代入演算子が、どのように作られるのかが分かりません。
色々と調べてみた結果、
コピーコンストラクタ
・メンバがクラスなら、クラスのコピーコンストラクタを使う
・それ以外(組み込み型)なら、ビットを全てコピーする
とありました。代入演算子も、同じ考え方で良いのでしょうか?
0580デフォルトの名無しさん
2006/10/05(木) 10:10:13・メンバがクラスなら、クラスのoperator=を使う
0581デフォルトの名無しさん
2006/10/05(木) 12:23:39正規表現のライブラリを使ってみようかと思って鬼車をダウンロードしたのですが、
コンパイルでエラーが出ます。
コンパイルの仕方はVCしか載っていないので、コマンドやオプションの違いから
わけがわかりません。
BCCでコンパイルできた方の方法や、参考になるサイトなどを
教えてもらえないでしょうか?
色々なキーワードでぐぐってみましたが、お手上げ状態です。
よろしくお願いします。
cl -O2 -nologo /W3 -DHAVE_CONFIG_H -DNOT_RUBY -DEXPORT /I. /I.. /Foreggnu.obj /
c reggnu.c
process_begin: CreateProcess((null), cl -O2 -nologo /W3 -DHAVE_CONFIG_H -DNOT_RU
BY -DEXPORT /I. /I.. /Foreggnu.obj /c reggnu.c, ...) failed.
make (e=2): 指定されたファイルが見つかりません。
make: *** [reggnu.obj] Error 2
0582デフォルトの名無しさん
2006/10/05(木) 15:00:53bcc32 hello.cとかやればできるよ。
0583デフォルトの名無しさん
2006/10/05(木) 15:06:060584デフォルトの名無しさん
2006/10/05(木) 16:37:26次の二つのクラスの定義で
どちらが良い、あるいは使い分けなどあるのでしょうか
class NotPointer{
private:
MyClass hoge;
//...
};
ポインタを使わず直接hogeを宣言
hogeデストラクタが呼ばれるので、deleteを気にしないで済む
class Pointer{
private:
Myclass* hoge;
//..
};
ポインタを使ってhogeを宣言
deleteを呼ばなければならない
pimplパターンが使える
hogeをstlコンテナに入れるならこっち?
下のほうが良いような気もするけど、どうもdeleteし忘れが・・
0585デフォルトの名無しさん
2006/10/05(木) 17:00:00線形リストや双方向リスト、循環リストを作る事ですか?
もしくわ、リストで使う構造体のメンバ変数の内容に応じた
関数を作ることですか?
それとも全く違うもんなんでしょうか。
どなたか教えていただきたいです。
0586デフォルトの名無しさん
2006/10/05(木) 17:00:52>どうもdeleteし忘れが・・
boost::sared_ptr
0587585
2006/10/05(木) 17:03:00循環じゃなく環状リストでした。
0588デフォルトの名無しさん
2006/10/05(木) 17:21:000589デフォルトの名無しさん
2006/10/05(木) 17:28:35ども、実は今ちょうどboostのインストール中です
基本的にポインタ版に書き換えようと思ってるんですが
shared_ptrなどを使うと
非ポインタ版の有利な点ってほとんどないんかなぁ
0590デフォルトの名無しさん
2006/10/05(木) 18:55:38void func( int ) {
}
int main() {
FP fp = func;
fp();
}
このようにするとtypedefでエラーが発生してしまいます。
関数ポインタを使用するときはデフォルト引数を使用できないのでしょうか?
0591デフォルトの名無しさん
2006/10/05(木) 19:19:33やりたいのはこういうこと?
できない予感がするがどうだったっけ?
0592デフォルトの名無しさん
2006/10/05(木) 19:36:40> This means that default arguments cannot appear, for example,
> in declarations of pointers to functions, references to functions,
> or typedef declarations.
0593デフォルトの名無しさん
2006/10/05(木) 19:54:47ありがとうございます。
期待するのはfp();でfunc(0);が呼ばれることだったのですが
どうやらできないみたいですね。
ちなみにtypedefの行での変数名は書き忘れでした。
(書いてもエラーが発生しました)
0594デフォルトの名無しさん
2006/10/05(木) 20:41:17>非ポインタ版の有利な点
newする必要がない(スタックに置ける)
0595デフォルトの名無しさん
2006/10/05(木) 23:22:27#define SIZE 4196
#include <stdio.h>
#include <stdlib.h>
#include <regexp.h>
int main(int argc, char *argv[]) {
size_t sLength;
char *p;
char c[SIZE];
switch(argc) {
case 2:
break;
default:
fprintf(stderr, "regexp0 [rR].*p < regexp0.cpp");/* 入力をリダイレクト */
exit(EXIT_FAILURE);
}
TRegexp o(argv[1]);
for(;;) {
p=fgets(c, SIZE, stdin);
if(p==NULL)
break;
o.find(p, &sLength, 0);
if(sLength==0)
continue;
fputs(p, stdout);
}
return EXIT_SUCCESS;
}
0596589
2006/10/05(木) 23:32:08なるほど。スタックって早いんでしたっけ
とりあえずポインタを通さない分は早くなりそうですね
ただ、スタックだとヒープのように巨大なメモリは取れなさそうですが
軽い、大量に作成するようなクラス向けってカンジでしょうか
0597デフォルトの名無しさん
2006/10/05(木) 23:37:52みたところ、君にはC/C++は向いてないよ。もう止めとけ。
0598デフォルトの名無しさん
2006/10/06(金) 01:18:27みたところ、君にはこのスレは向いてないよ。もう止めとけ。
0599デフォルトの名無しさん
2006/10/06(金) 02:04:48スタックが溢れちゃうのって嫌だよな。
0600デフォルトの名無しさん
2006/10/06(金) 05:12:58std::string s = "abc" + (std::string)c;
こんなキャストってやっていいんですかね?
何の問題も無く動くんですけど。
0601デフォルトの名無しさん
2006/10/06(金) 05:24:51さらに、std::string&を返すoperator+(const char*,const std::string&)もある
0602デフォルトの名無しさん
2006/10/06(金) 05:28:45なるほど。
ところで、なんでstringには、string::to_int()みたいなメソッドってないのでしょうか?
何か実装する上で問題でもあるんでしょうか?
0603デフォルトの名無しさん
2006/10/06(金) 08:00:420604デフォルトの名無しさん
2006/10/06(金) 09:27:080605デフォルトの名無しさん
2006/10/06(金) 11:54:020606デフォルトの名無しさん
2006/10/06(金) 12:00:380607デフォルトの名無しさん
2006/10/06(金) 12:10:58#そこまでするならboost使うか。
0608デフォルトの名無しさん
2006/10/06(金) 13:02:25#include <stdio.h>
int main(void)
{
FILE *fp;
int a;
a = 1;
fp=fopen("test.txt","w");
fprintf(fp,"%d\n",a);
fclose(fp);
return 0;
}
ファイルが無い状態で test.txt を作り 1 を書き込めたのですが
繰り返し処理は勉強しますので、
fopenの 1.txtの部分を変数にして 1.txt 2.txt 3.txt ・・・とすることが出来ますか?
aの数字と同じ名前のファイルを作りたいのです。
1.txt 内容 1
2.txt 内容 2
3.txt 内容 3
こんな感じです。
fopenって変数使えませんか?
0609デフォルトの名無しさん
2006/10/06(金) 13:09:30int main()
{
FILE *fp;
int a;
char fname[16];
for (i = 0; i < 3; i++) {
sprintf(fname, "%d.txt", a);
fp = fopen(fname, "w");
fprintf(fp, "%d\n", a);
fclose(fp);
}
return 0;
}
0610デフォルトの名無しさん
2006/10/06(金) 13:21:56#include <stdio.h>
int main()
{
FILE *fp;
int a,i;
char fname[16];
a = 1;
for (i = 1; i < 5; i++) {
sprintf(fname, "%d.txt", a);
fp = fopen(fname, "w");
fprintf(fp, "%d\n", a);
fclose(fp);
a++;
}
return 0;
}
これで1.txt〜4.txtまで書き込みできました。
0611デフォルトの名無しさん
2006/10/06(金) 14:10:12int main()
{
FILE *fp;
int i;
char fname[16];
for (i = 1; i < 5; i++) {
sprintf(fname, "%d.txt", i);
fp = fopen(fname, "w");
fprintf(fp, "%d\n", i);
fclose(fp);
}
return 0;
}
でいいね。
0612デフォルトの名無しさん
2006/10/06(金) 14:58:38それじゃ1.txtに4回書き込むことにならね?
0613デフォルトの名無しさん
2006/10/06(金) 15:08:04Visual C++(3)はじめてのMFCプログラミング
という書籍の例(VC++ 6)をVS2005上で実行しているのですが、
> m_Job.InsertString(-1, "プログラマ");
のようにしてもコンボボックスに項目が追加されません。
m_Jobはコンボボックスに割り付けたCComboboxクラスのメンバ変数です。
VS2005だと、何か他にすることが必要なのでしょうか?
0614デフォルトの名無しさん
2006/10/06(金) 15:16:33UNICODEのビルド設定の予感。
0615デフォルトの名無しさん
2006/10/06(金) 15:22:37未定義のシンボル i と出まして
int に i を追加してやると
0.txt 内容 0 の1つだけ出来ましたので
a = 1; と a++; 入れたんですが
今 a++;を抜いても同じになりました。
いらないみたいですね。
>>611
ありがとうございます。
a 無くても出来たんですね。
0616デフォルトの名無しさん
2006/10/06(金) 15:26:45ありがとうございます。
文字セットは設定なしでプログラミングするようにしています。
解決しました。 コンボボックスの展開したときの大きさが小さく、
項目が追加されていたのが見えないだけでした……。
お騒がせしました。
0617デフォルトの名無しさん
2006/10/06(金) 16:13:14プリクリエイトウィンドウが動いていないみたいなのですが、ダイアログベースでは使えないのですか?
0618(^-^) ◆MONSOON/qo
2006/10/06(金) 17:08:10初心者なんですがwindowsプログラムっていうのはどうやれば良いですか?
メニュー出して処理したいんですが
0619デフォルトの名無しさん
2006/10/06(金) 17:59:500620デフォルトの名無しさん
2006/10/06(金) 18:02:030621デフォルトの名無しさん
2006/10/06(金) 18:08:01ttp://msdn2.microsoft.com/ja-JP/library/0ecbz014.aspx
0622620
2006/10/06(金) 18:14:57解決しました
ありがとうございます
0623デフォルトの名無しさん
2006/10/06(金) 22:21:54while (何かの条件) {
string = (char *)realloc(何かの計算);
string = ・・・何かの処理・・・
・・・以下略・・・
}
こんな処理を続けていけば、メモリが細切れで使われて効率が
悪く、消費しているメモリがどんどん増えていくのでしょうか?
Win95/98とWinNT系ではメモリの管理が違うと聞きますが、
それによって違いなどが出てくるでしょうか?
確かめる方法が思い浮かばないので、どなたかお教えください。
0624デフォルトの名無しさん
2006/10/06(金) 23:00:26VC使ってるなら_CrtDumpMemoryLeaks
他は知らない
0625デフォルトの名無しさん
2006/10/06(金) 23:08:43こいつのC版みたいなのを昔公開してたけど、
boostで同じようなのを出してきた。
http://www.boost.org/libs/pool/doc/concepts.html
0626デフォルトの名無しさん
2006/10/06(金) 23:54:11回答をありがとうございます。
Wikipedia(Malloc)ではOSに依存するが、性能が低下したり
メモリ確保に失敗する可能性が高くなると書かれていました。
http://ja.wikipedia.org/wiki/Malloc
覚えたてで考えるのが面倒なため、reallocを頻繁に使うような
ルーチンを組んでいましたが、少し考え直したいと思います。
0627デフォルトの名無しさん
2006/10/07(土) 01:29:33MicrosoftのVisualStudioっていうものはコンパイルから実行までそれ一つで出来るんですか?
ボーランド社のものとかっていうのは用意しなくてはいいんでしょうか?
0628デフォルトの名無しさん
2006/10/07(土) 02:09:51MS社製のコンパイラも付属しているから安心して良いよ。
0629(^-^) ◆MONSOON/qo
2006/10/07(土) 02:11:23ボーランドでもMicrosoftでもコンパイルすれば
ほとんどどのWindowsに持っていっても実行できるよ
0630デフォルトの名無しさん
2006/10/07(土) 02:41:34C、C++と一口に言うが、実作業の効率はIDEへの慣れなんかも含まれるもの。
ならば潰しの利くメジャーな環境を使うのが吉に決まってる。
VCなら、一部の例外除けば大体において最適化性能とかでもBCに勝ってるし、
当然ながら他のMicrosoftのSDK類との親和も高い。
0631(^-^) ◆MONSOON/qo
2006/10/07(土) 02:49:21学習用にはボーランドがいいよ コンパイルが速いし
0632デフォルトの名無しさん
2006/10/07(土) 03:39:52株取引のシステムを作るためにC#の学習を始めようと思います。
その前に、サンプルのシステムのプログラムを現時点でどう解釈しているか、
アップして添削してもらっていいですか????
勉強のとっかかりがないもので…
0633デフォルトの名無しさん
2006/10/07(土) 03:43:30甘えんな。金払って学校行け。
0634(^-^) ◆MONSOON/qo
2006/10/07(土) 03:47:34ここでもやってるよ
★★★自動売買ソフトを作ろうぜ★★★ Part12
http://live19.2ch.net/test/read.cgi/stock/1159246240/
0635デフォルトの名無しさん
2006/10/07(土) 06:40:17UNICODE関係なのですが、W32コンソールアプリです
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _UNICODE
printf("_UNICODE defined\n");
#endif
_tprintf(_T("あいうえお\n"));
_tprintf(_T("abcde\n"));
getchar();
return 0;
}
----結果----
_UNICODE defined
abcde
--------
「あいうえお」が表示されないです
解決方法知ってる人教えてください
0636デフォルトの名無しさん
2006/10/07(土) 07:47:07setlocale(LC_ALL, "");
でとりあえず日本語が表示されるようにはなる。
が、副作用で wcout が壊れる VC2005 のバグはどうやれば回避出来るんだろ?
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=250724&SiteID=7
0637デフォルトの名無しさん
2006/10/07(土) 09:53:36あんなものなら、無いほうがまだまし。
というかなぜロケール外の文字は無効にするんだろう。
余計なお世話という気がしてならない。
0638デフォルトの名無しさん
2006/10/07(土) 09:54:410639至福
2006/10/07(土) 10:03:58C言語で素数列挙プログラムをつくっているのですが
高速にするためには剰余計算を
足し算(もしくは引き算)で行うようにするといいと言われました
いったいどのようなアルゴリズムで剰余計算を加算(or減算)で
おこなえるのでしょうか?
0640デフォルトの名無しさん
2006/10/07(土) 10:08:370641(^-^) ◆MONSOON/qo
2006/10/07(土) 10:43:570642(^-^) ◆MONSOON/qo
2006/10/07(土) 10:45:330643デフォルトの名無しさん
2006/10/07(土) 12:07:320644デフォルトの名無しさん
2006/10/07(土) 13:10:07まぁまぁ。
俺には 641,642は見えないから、何が書いてあるのか解らないけど、もちつけ。
0645デフォルトの名無しさん
2006/10/07(土) 13:16:40質問の後半は A%B よりも速い剰余計算ってことだよね。
余程の馬鹿コンパイラじゃない限り難しいんじゃないの?
"素数列挙"ってあるから普通のintとかじゃ無いのかも知れないけど。
質問の前半を見ると、あなたがやるべきことは剰余計算の速度アップ
では無い様に見えるが。
0646デフォルトの名無しさん
2006/10/07(土) 18:54:43Rubyをコンパイルするときに最適化の影響でオブジェクトが
レジスタにのってメモリ上に存在しないようになると、
GCで回収されなくなるってきいた。
(だからGCCのコンパイルオプションを-O3にするとダメなんだと)
今、Bohem GCを使ったソフトをコンパイルしてるんだが、
最適化オプションは最強にしない方がいいんかな?
0647デフォルトの名無しさん
2006/10/07(土) 20:59:02実行時に強制終了するのは何故なんでしょう?
3個の場合は問題なくて5個のときは駄目でした。
0648デフォルトの名無しさん
2006/10/07(土) 21:01:350649デフォルトの名無しさん
2006/10/07(土) 21:02:45スタックがあふれたんじゃね?
いまどきはそれほど気にするほどのものでないけど、
デカめの配列はヒープに確保するのが普通。
0650デフォルトの名無しさん
2006/10/07(土) 21:44:46ありがとうございます。動的確保をやってみます。
0651635
2006/10/07(土) 23:38:420652(^-^) ◆MONSOON/qo
2006/10/08(日) 03:11:56質問なんですが
数字のnビット目が1なら1を取り出すにはどうしたらいいですか?
なるべく計算コストがかからないやつが良いです
0653デフォルトの名無しさん
2006/10/08(日) 03:17:570654デフォルトの名無しさん
2006/10/08(日) 03:19:34「やりたいこと」はわかったから、「やったこと」と「どうなったのか」を頼む。
0655(^-^) ◆MONSOON/qo
2006/10/08(日) 03:19:43どうもありがとう
0656デフォルトの名無しさん
2006/10/08(日) 04:42:25pc.reset(id == 0 ? new aaa(0, "Aaa"):
id == 12 ? new aaa(12, "Aaa"):
new bbb(id) );
みたいなかんじなの
0657デフォルトの名無しさん
2006/10/08(日) 05:20:04new aaa と new bbb じゃ型が違うからダメなんだろ。
0658デフォルトの名無しさん
2006/10/08(日) 11:37:490659デフォルトの名無しさん
2006/10/08(日) 11:40:03getline
0660デフォルトの名無しさん
2006/10/08(日) 11:47:13速攻でのお答えありがとうございます。
説明不足で申し訳ありませんでした。
でも、ファイルからではなく文字列ポインタから取り出すような
関数ってないでしょうか?
0661デフォルトの名無しさん
2006/10/08(日) 11:48:450662デフォルトの名無しさん
2006/10/08(日) 11:51:28strstreamに一旦入れればいいんでね?
0663デフォルトの名無しさん
2006/10/08(日) 11:52:13#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
string s="Hello\nWorld";
string s2(s.begin(),find(s.begin(),s.end(),'\n'));
cout<<s2<<endl;
}
0664デフォルトの名無しさん
2006/10/08(日) 11:59:04回答をありがとうございました。
勉強をはじめたばかりで、標準の関数ですっきりと
表記できないかと思い質問をしました。
勉強になりました。
0665デフォルトの名無しさん
2006/10/08(日) 14:12:550666デフォルトの名無しさん
2006/10/08(日) 15:02:28int foo;
//...fooに対する演算
int bar[foo];//ここでコンパイルエラー
配列宣言の添え字には定数式が必要だと怒られてしまう。
任意の領域の分だけ確保したいんですが、どうすれば良いですか。
0667デフォルトの名無しさん
2006/10/08(日) 15:11:20何となく書き込んだら666をgetしてしまった。
不吉極まりない。俺は間違いなく明日死ぬ。
0668デフォルトの名無しさん
2006/10/08(日) 15:12:070669デフォルトの名無しさん
2006/10/08(日) 15:13:10了解。
0670デフォルトの名無しさん
2006/10/08(日) 16:02:440671デフォルトの名無しさん
2006/10/08(日) 16:19:150672デフォルトの名無しさん
2006/10/08(日) 16:25:030673デフォルトの名無しさん
2006/10/08(日) 16:33:310674デフォルトの名無しさん
2006/10/08(日) 16:37:16一輪車をこげないぞw
0675デフォルトの名無しさん
2006/10/08(日) 16:39:59gccを使う。
0676デフォルトの名無しさん
2006/10/08(日) 16:49:190677デフォルトの名無しさん
2006/10/08(日) 17:02:380678デフォルトの名無しさん
2006/10/08(日) 17:03:240679デフォルトの名無しさん
2006/10/08(日) 17:05:150680デフォルトの名無しさん
2006/10/08(日) 17:26:52最初にC++学ぶときに解説本のサンプルで使って以来
使わないな
0681デフォルトの名無しさん
2006/10/08(日) 19:02:210682デフォルトの名無しさん
2006/10/08(日) 19:06:230683デフォルトの名無しさん
2006/10/08(日) 23:04:54scoped_array/shared_arrayに入れるのならまだ許せる。
0684デフォルトの名無しさん
2006/10/08(日) 23:37:44MSDNは、未だに日本語マニュアル提供しないし。
0685デフォルトの名無しさん
2006/10/08(日) 23:54:50ttp://homepage3.nifty.com/aokura/tips/trouble.html
↑この構造体のエラーが起こってます。
けど、同じ環境でやってるのに以前はこんなエラー出ませんで、今回初めてです。
前は別にOSのバージョン指定しなくても出たし・・・。
なぜ今日は出たんだい?という疑問が消えません。エスパーの方助言をください。
0686685
2006/10/08(日) 23:55:390687デフォルトの名無しさん
2006/10/09(月) 00:05:24構造体を宣言してるヘッダファイル、複数のファイルからインクルードされてない?
0688デフォルトの名無しさん
2006/10/09(月) 00:14:34数年前にCをやったことがあります。
あまり覚えていませんけど。
環境はVisual Studio 2005 EE が入っています。
よろしくお願い致します。
0689デフォルトの名無しさん
2006/10/09(月) 00:18:09マジデ。
0690デフォルトの名無しさん
2006/10/09(月) 00:18:45たくさん。取り敢えずEffective C++/More Effective C++とか、
独習C++とか。
0691デフォルトの名無しさん
2006/10/09(月) 00:18:51Cでどの程度までやったかによる。
C++はCを包含してはいるが、その割合は思ったより小さいぞ。
Cのことなぞ忘れて最初っからC++に関して学べ。
0692デフォルトの名無しさん
2006/10/09(月) 00:23:17そういやC++ Primerが新しくなってたな。やっぱり厚いけど。
0693デフォルトの名無しさん
2006/10/09(月) 00:24:14>>689
7000円位する分厚いやつですよね?
第3版の。
>>680
独習C++は結構評判がいいらしいですね。
見てみます。
>>691
結城浩氏の入門書を読んだ程度です。
それ以外は読んでいません。
0694デフォルトの名無しさん
2006/10/09(月) 00:24:59以前このスレだかで出た話題では、独習〜系は好みが分かれる様子だった。
俺は個人的には嫌いだけど、合う人もいるのかもしれない。
C++のちゃんとした本っつーと、それこそ「プログラミング言語C++第三版」とかなんだが、
初学者向きとは言いがたい本でもある。
いずれ買うことにはなるとは思うけど。
0695デフォルトの名無しさん
2006/10/09(月) 00:26:07どうして推薦図書スレに行かないのやら…┐( ̄ー ̄)┌
0696デフォルトの名無しさん
2006/10/09(月) 00:27:53>>692
分厚くないのを紹介して頂きたいです。
読みやすいのでしたら、分厚くても構わないんですが。
0697685
2006/10/09(月) 00:35:35あ、すみませんエラーといったのは間違いです、コンパイルは通るんですが
実行時にGetOpenFileNameの戻り値がFALSEになっちゃうというわけです。
要はOPENFILENAME構造体のlStructSizeへの指定値がまずいのだと思います。
lStructSizeを直接76にしたらちゃんとファイルオープンダイアログが開きましたので。
ただどうして今までは開かなかったのだろう?と疑問に思った次第でして。
0698685
2006/10/09(月) 00:36:380699デフォルトの名無しさん
2006/10/09(月) 00:37:37どうしても同じにしか見えないんです。
0700デフォルトの名無しさん
2006/10/09(月) 00:42:39一番重要なポイントは参照は必ず初期化されなければならないってことかな。
NULLチェックが入らなくなるから重宝するかも。
あとはコードの見ための違いね。
0701デフォルトの名無しさん
2006/10/09(月) 00:42:41見えないものをいくら説明したって見えるようにはならんよ。
0702デフォルトの名無しさん
2006/10/09(月) 00:43:59ポインタの場合はNULL。
0703デフォルトの名無しさん
2006/10/09(月) 00:44:27よい。
0704699
2006/10/09(月) 01:19:22レスどうもです。
なんとなくわかったような・・・です。
ポインタを勉強し直した方が良さそうですね。
ありがとうございました。
0705デフォルトの名無しさん
2006/10/09(月) 01:25:43ポインタは何を指すかを好きなように変更できる。何も指さないのもあり。
ポインタの演算で、連続して配置された同じ型のデータをあれこれ指し示すことも可能。
0706デフォルトの名無しさん
2006/10/09(月) 01:38:11過去(VC6のころ)は提供してた。
なんで英語になっちゃったんだろう?
0707デフォルトの名無しさん
2006/10/09(月) 01:57:16今まではどこかで偶然_WIN32_WINNTが適当に定義されていたのでは?
ところでNT系専用のプログラムを作るのではない場合、
個人的には_WIN32_WINNTを0に定義するのがおすすめ。
>>706
つい最近までWebでも見れた(ググれば見つかった)のだが、とうとう消えてしまった。
0708デフォルトの名無しさん
2006/10/09(月) 02:01:27まだ規格がきっちり決まっていない頃に実装されたSTLを元にしたマニュアルで、
古くなりすぎて切り捨てたのでは?
0709デフォルトの名無しさん
2006/10/09(月) 02:30:520710デフォルトの名無しさん
2006/10/09(月) 14:34:19_itot_s(774, args ,sizeof(args)); ってやっていたのですが、argsの型がcharからwchar_tになると
文字列長<関数に渡すバイト数 となってあぼんしてしまいます。
こういう関数へのバッファ指定というのは、変数の宣言した長さで直接
_itot_s(774, args, 260); とするのが普通なんでしょうか?
長ったらしくても sizeof(args) / sizeof(args[0]) とか指定するの普通?
0711デフォルトの名無しさん
2006/10/09(月) 16:12:380712デフォルトの名無しさん
2006/10/09(月) 16:12:41配列の要素数を求める関数テンプレートって、標準かboostになかったっけ?
0713デフォルトの名無しさん
2006/10/09(月) 16:24:01>文字列長<関数に渡すバイト数 となってあぼんしてしまいます。
3引数を取る _itot_s の仕様をよく確認してみると隠者内科医?
まあそれはともかく
>_itot_s(774, args, 260); とするのが普通なんでしょうか?
数字を直書きは普通しない。BUF_SIZE みたいな識別子を使うのは普通。
sizeof/sizeof も普通。C++ だと template の推論機能で同じことが出来る。
C++版 _itot_s がバッファ長を必要としないのはこの機能を使っているから。
0714デフォルトの名無しさん
2006/10/09(月) 16:43:48アクセスするバグを南斗言いますか?
0715デフォルトの名無しさん
2006/10/09(月) 16:44:58なる。勉強になります。
確かに、標準関数だとバッファ長求めないものがありました。
WinAPIだと必須ですけどsizeof/sizeofも単純な
マクロかtemplateで書けるようなのでそっちにすべきですね。
>関数に渡すバイト数
渡すのは文字単位ダネ
0716デフォルトの名無しさん
2006/10/09(月) 16:46:020717デフォルトの名無しさん
2006/10/09(月) 16:53:04不正アクセス
0718デフォルトの名無しさん
2006/10/09(月) 19:54:26開放済み領域への不正アクセス
0719デフォルトの名無しさん
2006/10/09(月) 20:13:01AV
0720デフォルトの名無しさん
2006/10/09(月) 20:17:080721デフォルトの名無しさん
2006/10/09(月) 20:26:050722デフォルトの名無しさん
2006/10/09(月) 20:26:50マジレス、かっこわるい
0723デフォルトの名無しさん
2006/10/09(月) 23:10:10教えてください。
0724デフォルトの名無しさん
2006/10/09(月) 23:16:13コールバックのことが多いかと。
0725デフォルトの名無しさん
2006/10/09(月) 23:18:59qsort(), bsearch()のマニュアルページでも参照してください。
0726デフォルトの名無しさん
2006/10/09(月) 23:22:03freeを使わなくても開放されたと考えていいの?
0727デフォルトの名無しさん
2006/10/09(月) 23:22:030728デフォルトの名無しさん
2006/10/09(月) 23:25:39いいえ。
>>727
.hに宣言を、.cppに実装を書くと便利な理由があるのです。
0729デフォルトの名無しさん
2006/10/09(月) 23:25:42いいえ
>727
そんな貴方におすすめのJava
0730デフォルトの名無しさん
2006/10/09(月) 23:27:16freeを使いなさい。
0731726
2006/10/09(月) 23:38:51回答ありがとうございます。
そうだったんですか。
関数の返値に使っているんですが、どうしたらよいでしょうか?
最初に関数外で定義しておくべき?
0732デフォルトの名無しさん
2006/10/09(月) 23:44:53場合による。
あらかじめ必要な容量がわからない場合にはその関数内で確保することも止む無し。
メモリの解放は呼び出し側で行うことをドキュメントに記載せよ。
0734デフォルトの名無しさん
2006/10/09(月) 23:50:32ってなんですか?
0735デフォルトの名無しさん
2006/10/10(火) 00:04:31戻り値がintで引数なしの関数ポインタの配列を引数に取る戻り値がintの関数のポインタのポインタを返す関数のプロトタイプ宣言
0736デフォルトの名無しさん
2006/10/10(火) 00:04:49operator=をprivate宣言したクラスAがあったとして
A a;
A b = a;
としたときbの初期化はコピーコンストラクタによって行われますよね?
0737デフォルトの名無しさん
2006/10/10(火) 00:05:44戻り値がintで引数なしの関数ポインタの配列を引数に取る戻り値がintの関数のポインタのポインタを返す引数なしの関数のプロトタイプ宣言
0738デフォルトの名無しさん
2006/10/10(火) 00:26:130739デフォルトの名無しさん
2006/10/10(火) 00:32:410740デフォルトの名無しさん
2006/10/10(火) 00:35:230741デフォルトの名無しさん
2006/10/10(火) 00:44:22http://kmaebashi.com/programmer/pointer.html
>>736
そのとおり。
0742デフォルトの名無しさん
2006/10/10(火) 00:48:13#include <stdio.h>
int (*(*p()))(int (*[])()); // p is function returning pointer to pointer to function with array of pointer to function returning int returning int
int f(int (*[])());
int (*g)(int (*[])()) = f;
int (**h)(int (*[])()) = &g;
int x();
int y();
int (*a[])() = {x, y};
int main(void)
{
printf("%d\n", f(a));
printf("%d\n", (*g)(a));
return 0;
}
int (*(*p()))(int (*a[])()) { return h;}
int f(int (*a[])())
{
int i = a[0]() + a[1]();
return i;
}
int x()
{
return 1;
}
int y()
{
return 2;
}
0743デフォルトの名無しさん
2006/10/10(火) 00:50:02printf("%d\n", (**h)(a));
0744デフォルトの名無しさん
2006/10/10(火) 00:54:190745デフォルトの名無しさん
2006/10/10(火) 00:57:010746デフォルトの名無しさん
2006/10/10(火) 00:59:570747デフォルトの名無しさん
2006/10/10(火) 01:26:09typedef int (**ret)(arg) ;
ret func(void) ;
int (*( *p() )) ( int (*[])() ) ;
int main()
{
std::cout << typeid(func).name() << std::endl ;
std::cout << typeid(p).name() << std::endl ;
}
たまたまスレを見たばかりに、30分も暇つぶししてしまった。
なるほどなるほど。
0748デフォルトの名無しさん
2006/10/10(火) 02:10:410749デフォルトの名無しさん
2006/10/10(火) 02:19:23関数のみを分類したいならそれでもいいでしょうが、
データを分類したくなると構造体を使いたくなりませんか?
構造体を用意したら、その構造体のメンバをアクセスする関数を作ってカプセル化したくなりませんか?
もし同意できないようでしたら阿呆ですが、同意できるかどうか判断できないのでしたら勉強不足ということですね。
0750デフォルトの名無しさん
2006/10/10(火) 03:56:04ファイルのオープンに失敗したとかで、強制的にプログラムを終了させたいときに
exitを使いますよね?
参考書によっては、exit(-1)だったりexit(1)だったり、
引数が違うんですけど、何か意味があるんでしょうか?
0751750
2006/10/10(火) 04:11:23スルーしてください。すいませんでした
0752デフォルトの名無しさん
2006/10/10(火) 08:13:480753デフォルトの名無しさん
2006/10/10(火) 16:49:060754デフォルトの名無しさん
2006/10/10(火) 16:53:13特殊なオープンの仕方、とかは無いな。
0755デフォルトの名無しさん
2006/10/10(火) 17:01:25ありがとうございます
0756デフォルトの名無しさん
2006/10/10(火) 18:14:320757デフォルトの名無しさん
2006/10/10(火) 18:26:170758デフォルトの名無しさん
2006/10/10(火) 18:30:51バイト数ではない範囲 (読んでみないとわからないようなフォーマットでの勘定とか) とかだと
先頭から逐次読みながら必要かどうか判断しないといけないかも
0759デフォルトの名無しさん
2006/10/10(火) 21:21:55C++ではクラス名の前には必ず"C"をつけるものなんでしょうか?
つけなくてもコンパイルは通るみたいなんですが。
0760デフォルトの名無しさん
2006/10/10(火) 21:27:57好きな名前付けるがよろし
0761デフォルトの名無しさん
2006/10/10(火) 21:29:090762デフォルトの名無しさん
2006/10/10(火) 21:29:10ハンガリアン記法 でググルと吉
0763デフォルトの名無しさん
2006/10/10(火) 21:45:320764デフォルトの名無しさん
2006/10/10(火) 21:55:27クラスしか使ってないことに気づき、止めた
0765デフォルトの名無しさん
2006/10/10(火) 22:02:16マイクロソフトが長いものかどうかは賛否両論あるだろうが。
0766デフォルトの名無しさん
2006/10/10(火) 22:07:29char c[256];
int i;
for(i=0;i<256;i++){
c[i]= i;
}
とした結果、c[]の0x81から0x9Fと 0xe0から 0xfcには0が入ってしまいます。
char型には代入できない値があるのでしょうか?
単純に指定した値0〜255を代入したいのですが。
0767(^-^) ◆MONSOON/qo
2006/10/10(火) 22:09:42unsigned charを使おうぜ!
0768デフォルトの名無しさん
2006/10/10(火) 22:10:08unsigned
0769デフォルトの名無しさん
2006/10/10(火) 22:13:420770デフォルトの名無しさん
2006/10/10(火) 22:21:48char c[256];
を
long long c[256];
にしる。
0771デフォルトの名無しさん
2006/10/10(火) 22:22:32そのMicrosoftは.NET Frameworkからハンガリアン記法を捨てていますが。
0772デフォルトの名無しさん
2006/10/10(火) 22:28:24デバッガの変数ウィンドウで確認しているのですが
unsigned charとしても同じでした。
いま組んでいるプログラムで大事な部分なのでショックなのです。
0773しょう
2006/10/10(火) 22:33:460774デフォルトの名無しさん
2006/10/10(火) 22:36:55符号は全く関係ない。
> デバッガの変数ウィンドウで確認
これが怪しい。何を持って代入されてないと思っているのかが。
for(i=0;i<256;i++){
printf("02X\n,(unsigned)c[i]);
}
これでどう表示される?
0775デフォルトの名無しさん
2006/10/10(火) 22:40:14OSを再インストールするかPCを買い換えればいいと思うよ
0776デフォルトの名無しさん
2006/10/10(火) 22:40:29WWWWWwwwwwwwwwwwwwwwwwwww
0777デフォルトの名無しさん
2006/10/10(火) 23:11:14こういうのって釣りだよなぁ。
うむぅ。
0778デフォルトの名無しさん
2006/10/10(火) 23:16:27> 0x81から0x9Fと 0xe0から 0xfc
これがさ、まんま Shift-JIS の半角文字コードじゃん
あやしい
0779デフォルトの名無しさん
2006/10/10(火) 23:16:58CString str;
str.Format("%02X\n", c[0xe0]);
AfxMessageBox(str)
上記にて確認したところ、値0xE0は正常に入っていました。
デバッガでは値欄に0が入っていたので、悩んでました。
>>774さん、ありがとうございます
0780デフォルトの名無しさん
2006/10/11(水) 00:25:43考えたのですが、もっとエレガントにする方法はないでしょうか?
何となく面倒な方法をとっているような気がするのですが、
これ以外の方法が思いつきませんでした。
よろしくお願いします。
----- ↓ テストしてみたソース -----
#include <stdio.h>
#include <string.h>
main()
{
char str[] = "ABCDEF\nGHIJK\nLMNO"; // 文字列の最後に改行がない可能性もあります
char str2[16]; // 配列を16文字にしているのはこの場合は適当です。
char *s;
while (sscanf (str, "%[^\n]", str2)) {
printf ("%s\n", str2); // 内容確認のための表示です。
s = strstr (str, "\n");
if (s) {
s++;
strcpy (str, s); // strの内容は破壊されて大丈夫です。
}
else break;
}
return 0;
}
0781デフォルトの名無しさん
2006/10/11(水) 00:28:59sgets();
sclose();
0782ヒント:sscanf()のフォーマットを工夫すると楽になる
2006/10/11(水) 00:39:38取り敢えずいいんでない?
文字列処理にもっとなれてくればもっと手ごろな方法も思いつくだろうけど。
まぁ、strstr()はstrchr()で充分だね。
0783デフォルトの名無しさん
2006/10/11(水) 01:13:32sgetsがあったら良いのにというのは見つけましたが・・・。
すみません、よくわかりませんでした。
>>782
ありがとうございます。
なにぶん、勉強をはじめて一週間ほどですので頭の回転が
追いついておりません。
関数はstrchr()を利用したいと思います。
収穫となるご助言をありがとうございました。
0784デフォルトの名無しさん
2006/10/11(水) 02:16:46grid[i][j]に隣接している配列(grid[i+1][j],grid[i-1][j],grid[i][j+1],
grid[i-1])の最小値をgrid[i][j]に代入するプログラムを作りたいのですが
どうすればよいでしょう?
ちなみに上のは全体がループの中でi,jは毎回選ばれます。grid[i][j]が
の中身が空の時のみくりかえし処理されます。
0785デフォルトの名無しさん
2006/10/11(水) 03:13:460 しか入らないぞ
>ちなみに上のは全体がループの中でi,jは毎回選ばれます。
日本語でおk
>grid[i][j]がの中身が空の時のみくりかえし処理されます。
空ってなに
int g0 = grid[i+1][j];
int g1 = grid[i-1][j];
int g2 = grid[i][j+1];
int g3 = grid[i][j-1];
grid[i][j] = min(g0, min(g1, min(g2, g3)));
でええんちゃう
端のグリッド選んだときに注意な
0786デフォルトの名無しさん
2006/10/11(水) 03:43:25#define grid[L][L]
clear_grid(i,j,label); //グリッド全部を0(空)にする関数。grid[i][j]=0
int i,j,n;
i=(int)((L-2)(double)rand()/RAND_MAX+1);//1からL-1までの乱数を用意。
j=(int)((L-2)(double)rand()/RAND_MAX+1);
label[i][j]=1; //最初のラベルは1
largest =1; //最大のラベル。。。最初は1
for(n=2;n<L*L;n++){
i=(int)((L-2)(double)rand()/RAND_MAX+1);//1からL-1までの乱数を用意。
j=(int)((L-2)(double)rand()/RAND_MAX+1);
if(label[i][j]=0){ //でたらめに選んだサイトが空の場合のみ実行
if(label[i+1][j]+label[i-1][j]+label[i][j+1]+label[i][j-1] ==0){//隣のサイトも空の場合
largest=largest+1; //最大ラベルを更新
label[i][j]=largest; //最大ラベルをそのサイトに付けます。
}else{ //近隣のサイトが空で無い場合
check_neighbor(...); //近隣サイトの最小ラベルをそのサイトのラベルにします。
}
}
という感じのプログラムで、check_neighbor(...)の関数の中身を作るのに
四苦八苦してました。
>>785さん、ありがとう。最後のラインは考えつかなかったです。
0787デフォルトの名無しさん
2006/10/11(水) 05:24:56何とか、Percolationのシミュレーションが出来ました。
0788デフォルトの名無しさん
2006/10/11(水) 10:20:10簡単なゲームを作るとして、メーン関数、描画関数、入力関数とファイル分割して
作成しようとし、描画関数と入力関数とで共用して使う変数Aは何処で
どう宣言すればいいのでしょうか?
0789デフォルトの名無しさん
2006/10/11(水) 10:31:240790デフォルトの名無しさん
2006/10/11(水) 10:45:16簡単にする標準的な関数などはありますか?
0791デフォルトの名無しさん
2006/10/11(水) 10:46:52環境依存である
ANSI標準だと全くないはず
0792デフォルトの名無しさん
2006/10/11(水) 10:54:230793デフォルトの名無しさん
2006/10/11(水) 11:08:240794デフォルトの名無しさん
2006/10/11(水) 11:53:07ありがとうございました。
0795デフォルトの名無しさん
2006/10/11(水) 12:05:18それを詳しく
0796デフォルトの名無しさん
2006/10/11(水) 12:15:430797デフォルトの名無しさん
2006/10/11(水) 12:30:24いや実行画面で
editboxに入力するような感じでできないかと
0798デフォルトの名無しさん
2006/10/11(水) 12:37:09自分で入力する文字列を日本語にしたいというならPC初心者板へ。
どう考えても>>792は後者だろ?
0799デフォルトの名無しさん
2006/10/11(水) 12:41:000800デフォルトの名無しさん
2006/10/11(水) 12:41:450801デフォルトの名無しさん
2006/10/11(水) 12:43:500802デフォルトの名無しさん
2006/10/11(水) 12:45:01入力したローマ字に応じてカナ文字に変えていく事になるんですか?
0803デフォルトの名無しさん
2006/10/11(水) 12:45:440804デフォルトの名無しさん
2006/10/11(水) 12:47:310805デフォルトの名無しさん
2006/10/11(水) 12:53:05それを例えば配列に入れて先頭から'a'なら'あ'、
'k''a'なら'か'を出力みたいな事がもう少し楽にできないものかと
0806デフォルトの名無しさん
2006/10/11(水) 13:07:36コンソールへの日本語の入力方法がわからないなら>>796
0807デフォルトの名無しさん
2006/10/11(水) 13:08:160808デフォルトの名無しさん
2006/10/11(水) 13:13:210809デフォルトの名無しさん
2006/10/11(水) 13:15:05適切な板に誘導されてるんだから、誘導された板で聞いてみたら?
0810デフォルトの名無しさん
2006/10/11(水) 13:15:40getch()2回なんてやり方があるんですか。調べてみます
ありがとうございました
>>807
getsから2つ取り込めばできるかもしれませんね・・・。どうもです
0811デフォルトの名無しさん
2006/10/11(水) 13:28:42gets() を推奨するな。
fgets() にしとけ。
0812デフォルトの名無しさん
2006/10/11(水) 14:41:39fgets(buf, 2, stdin)
0814デフォルトの名無しさん
2006/10/11(水) 23:58:35ここは"東京"です。
という風にしたいのですが、どうしたらいいですか?
0815デフォルトの名無しさん
2006/10/12(木) 00:00:09\"
0816デフォルトの名無しさん
2006/10/12(木) 00:10:050817デフォルトの名無しさん
2006/10/12(木) 00:13:46>>816
ありがとうございます。m(_ _)m
0818デフォルトの名無しさん
2006/10/12(木) 00:31:20のようにaを5桁表示したい場合なんですが、
この「5」桁というのをマクロで定義しておいて、後から変えたいと思ってるんですが、
#define KETA 5
pritnf( "%KETAd",a);
こんな感じでやったら %K と ETAd に分かれてしまって、うまくいきませんでした。
何か良い方法ありますか?
0819デフォルトの名無しさん
2006/10/12(木) 00:33:31void prt(int KETA, int a){
char s="% d";
if(!(1<=KETA && KETA<=9)) return;
s[1]=KETA+'0';
printf(s,a);
}
ってできたっけ?
0820デフォルトの名無しさん
2006/10/12(木) 00:34:08↓
char[] s=..;
0821デフォルトの名無しさん
2006/10/12(木) 00:35:26#define KETA "5"
printf( "%"KETA"d",10);
#define KETA 5
printf( "%*d,KETA,10);
0823デフォルトの名無しさん
2006/10/12(木) 02:06:17おいおい
0824デフォルトの名無しさん
2006/10/12(木) 02:45:19どっちかっつーとどっち側寄りどっち側所属なのかをよく考えて、
好きな方に置くとよい。
でもそもそも変数を共通で使いまわすやり方は、きょうびあまり流行らない。
C++なら、メーンのクラスを一っこ書いて、そこから描画と入力を呼び出すようにするとよい。
ファイルを分割した方がいいかは、書いたコードの量と相談して決めるとよい。
よいったらよいぞ。メーン。
0825デフォルトの名無しさん
2006/10/12(木) 02:53:36先生!
>>826君がツキやってます!
0826デフォルトの名無しさん
2006/10/12(木) 04:32:280827デフォルトの名無しさん
2006/10/12(木) 06:55:53setprecisionを使おうと
fout<<setprecision(20);
のようにすると、コンパイルできません。
どこのようにすればよいのでしょうか?
0828デフォルトの名無しさん
2006/10/12(木) 07:47:18それではどこが悪いか判断しかねる。
エラーメッセージを張りなさい。
0829デフォルトの名無しさん
2006/10/12(木) 07:53:050830デフォルトの名無しさん
2006/10/12(木) 07:54:350831827
2006/10/12(木) 08:03:320832デフォルトの名無しさん
2006/10/12(木) 08:30:51visual C++ 5.0でかかれたオープンソースがマニュアルに従ってビルドしようと思ってもどうしてもできなくて困ってます.
ヘッダファイルが足りないとかじゃなくて「';'が'&'の前にありません」とか,そういうソースの書き方に問題があるらしくエラーが出てしまうんです.
0833デフォルトの名無しさん
2006/10/12(木) 08:35:110834デフォルトの名無しさん
2006/10/12(木) 08:46:52ある
0835デフォルトの名無しさん
2006/10/12(木) 08:51:50ただ答を言うなら「できる」になるけど、あんたのそれはまず間違いなく
訊きたいことと訊いてることが一致していない。
0836デフォルトの名無しさん
2006/10/12(木) 08:58:25裏側にありそうな話としては
・継承して機能を追加するには、クラス名を変更しなければならない
こういう考え方結構好き
0837デフォルトの名無しさん
2006/10/12(木) 09:28:02visual C++ 6.0ならできたりするんでしょうか?
0838デフォルトの名無しさん
2006/10/12(木) 10:40:35>814とか>818とか,リファレンスを読めばすぐ解ることまで人に聞くのはいかがなものか
0839デフォルトの名無しさん
2006/10/12(木) 11:10:16答える気もないのに提言をした気になって一人前のつもりになるのはいかがなものか
0840デフォルトの名無しさん
2006/10/12(木) 11:30:570841デフォルトの名無しさん
2006/10/12(木) 11:46:41case by case
0842デフォルトの名無しさん
2006/10/12(木) 12:32:40ですかー.
またなんとかやってみます.
どうもありがとうございました.
0843デフォルトの名無しさん
2006/10/12(木) 13:20:31class Foo : public Super
{
};
みたいにやって
Foo<Bar> a; // Barの機能を追加したFoo
Foo<Baz> b; // Bazの機能を追加したFoo
みたいにしたいんですが、SuperからFooのメンバにアクセスするにはどうすれば良いですか?
(私は833とは別人です)
0844デフォルトの名無しさん
2006/10/12(木) 13:35:31Super クラスの設計ミスっぽいが…
「this に対して dynamic_cast で 型チェックしながら回す?」のも
そのコードを "Super クラス内で記述する" には、既に継承された子一覧がないと…ムリポ
# Super* なポインタだけど、実体は Foo<Bar>, Foo<Baz> ならやりようはあるんじゃね?
0845デフォルトの名無しさん
2006/10/12(木) 13:37:41char配列を0xFFFFF確保しようとすると、異常終了してしまいます。
約1MBで異常終了なんですが、本当は15MBくらい必要なんです。
どうしたら良いですか。
0846デフォルトの名無しさん
2006/10/12(木) 13:38:32class Foo : public Super<Foo>
{
};
としてSuperの中で
static_cast<Foo>(*this)
するといける。
0847デフォルトの名無しさん
2006/10/12(木) 13:42:25template <template <class> class Super>
class Foo : public Super<Foo>
{
};
template <class Derived>
class Bar
{
void f(){
Derived& derived = *static_cast<Derived*>(this);
// derivedのメソッドを呼び出す。
}
};
これで
Foo<Bar> hoge;
hoge.f();
とするといけるはず。
0848844
2006/10/12(木) 13:50:36かなり複雑な template の使いまわし方だ orz
template<type> で type がさらに template になってるから ややこしいったらありゃしないw
>>843 の意図が微妙だな。
Super のメソッド内記述で Derived へアクセスしたいように見えるけど、 >>847 コードはダメだよね?
0849デフォルトの名無しさん
2006/10/12(木) 13:51:43スタック
0850デフォルトの名無しさん
2006/10/12(木) 14:00:36どのように書けばよいのでしょうか?
0851847
2006/10/12(木) 14:09:11このコードは通るけど
#include <iostream>
#include <string>
using namespace std;
template <class Derived>
class Bar
{
public:
void f(){
Derived& derived = *static_cast<Derived*>(this);
cout << "call method of " << derived.name() << endl;
}
};
// ここのBarを決め打ちしたくない
class Foo : public Bar<Foo>
{
public:
string name(){
return string("Foo");
}
};
int main(){
Foo a;
a.f();
return 0;
}
う〜む。
0852デフォルトの名無しさん
2006/10/12(木) 15:47:41str = (char *)malloc(4);
strcpy (str, "ABC");
str++;
printf ("%s", str);
free (str);
としたときに開放されるメモリはmallocで獲得した領域から?
それとも+1された領域から開放されて、この場合は1バイトが
ゴミとして残るのでしょうか?
それとも開放されないのでしょうか?
str--;
printf ("%s", str);
free (str);
printf ("%s", str);
をつなげたら次のように表示されました。
BCABC「@
0853デフォルトの名無しさん
2006/10/12(木) 15:49:560854デフォルトの名無しさん
2006/10/12(木) 15:52:050855デフォルトの名無しさん
2006/10/12(木) 15:53:160856デフォルトの名無しさん
2006/10/12(木) 15:54:31ポインタ操作したいなら、ポインタのコピー取っとけ
char* str;
char* p;
p = str = (char*)malloc(4);
p++; とかポインタ操作
......
free(str);
0857デフォルトの名無しさん
2006/10/12(木) 15:55:52またfreeしても、使っていたメモリは(たいていは)そこにそのまま残っているが
アクセスしてはいけない。
0858デフォルトの名無しさん
2006/10/12(木) 15:55:550859デフォルトの名無しさん
2006/10/12(木) 15:59:42malloc の戻り値でない値に対しての free は動作未定義
という事でしてはいけないのを理解しました。
ありがとうございます。
>>858
喜んでいただけて何よりです。(笑)
0860デフォルトの名無しさん
2006/10/12(木) 16:07:10OS道ズレで落ちる 〜 何もしない までバリエーションは色々
0861デフォルトの名無しさん
2006/10/12(木) 16:54:07「道連れ(みちづれ)」
0862デフォルトの名無しさん
2006/10/12(木) 17:19:580863デフォルトの名無しさん
2006/10/12(木) 19:12:32i = atoi(str);
のようにやるみたいなので、文字列の中の一部(必ず2文字目)から0〜9の一桁を取りたいと思い、
i= atoi(str[1]);
とやるとcharからconst char *に変換できませんって言われます。
どうやれば一桁の数字だけを取れるんでしょうか?
0864デフォルトの名無しさん
2006/10/12(木) 19:16:300865デフォルトの名無しさん
2006/10/12(木) 19:24:260のアスキー番号を引けば、欲しい数字になるんですね。
ありがとうございました。
0866デフォルトの名無しさん
2006/10/12(木) 20:18:50出して反発する初心者には正直うんざりする。
こういう馬鹿が一番学びが遅い。
0867デフォルトの名無しさん
2006/10/12(木) 20:24:470868デフォルトの名無しさん
2006/10/12(木) 20:36:190869デフォルトの名無しさん
2006/10/12(木) 22:37:27ただし疑問をぶつける先はまずGoogleや書籍などであるべきだな。何でも人に聞こうとするやつはもっと成長しない。
0870デフォルトの名無しさん
2006/10/12(木) 23:05:000871デフォルトの名無しさん
2006/10/13(金) 00:03:290872デフォルトの名無しさん
2006/10/13(金) 00:08:160873デフォルトの名無しさん
2006/10/13(金) 00:13:04int main(void);
int main() {
printf("質問まだー\n");
main();
return 0;
}
0874デフォルトの名無しさん
2006/10/13(金) 00:16:58無限ループ乙
0875デフォルトの名無しさん
2006/10/13(金) 00:20:28あんたあふぉ?
0876デフォルトの名無しさん
2006/10/13(金) 00:30:1408771/2
2006/10/13(金) 00:51:37現在、再利用可能にしようと思い、ウィンドウをクラス化してます
次の状態で、ウィンドウA以下を再利用したいんですが
まだ、ウィンドウメッセージのやり取りに関する知識が少なく
どのようにすべきか悩んでいます
メインウィンドウmain
子ウィンドウchildA (mainと同じサイズ)
子ウィンドウchildB (childAの左半分に配置)
自作コントロールCtrlA (childBと同じサイズ)
子ウィンドウchildC (childAの右半分に配置)
自作コントロールCtrlB (childCと同じサイズ)
現在、ウィンドウは配置したところまで出来ており
main以下全てのクラスはそれぞれのウィンドウのプロシージャを持ってます
08782/2
2006/10/13(金) 00:53:09childAを他プロジェクトでそのまま再利用できると思ったんですが
例えばCtrlキー+TabキーでCtrlA→CtrlBにフォーカス移動するという処理は
フォーカスがあるCtrlAにウィンドウメッセージが行きますよね
ChildAで情報を管理したいのに
CtrlAにメッセージが行くのでどうやっていいかわからず
手が止まっています
この場合、どうすればchildAでメッセージ処理できるのでしょうか
後言い忘れましたが環境はwindows2000,VC8です
長文ですいません
0879デフォルトの名無しさん
2006/10/13(金) 01:14:26あんたもあふぉ
0880デフォルトの名無しさん
2006/10/13(金) 01:14:34未だにCコンパイラは未到達コードの除去や末尾再帰のループ展開をしないのか?
0881デフォルトの名無しさん
2006/10/13(金) 01:15:55最適化しなきゃそうだろう
0882デフォルトの名無しさん
2006/10/13(金) 01:19:57思われそうですがファイル名から拡張子を抜くような
処理を作りたいのですがどうすればよいでしょうか・・・
ahoaho.txt → ahoaho
のようにです。
0883デフォルトの名無しさん
2006/10/13(金) 01:23:30WindowsならそれやってくれるAPIがある。
0884デフォルトの名無しさん
2006/10/13(金) 01:24:38*strchr(abc, '.') = '\0';
0885デフォルトの名無しさん
2006/10/13(金) 01:26:24char *p;
if (p = strchr(abc, '.'))
*p = '\0';
の方がいいか。
0886デフォルトの名無しさん
2006/10/13(金) 01:26:320887デフォルトの名無しさん
2006/10/13(金) 01:35:02strchrだと最初のを見るから
hoge.tar.gzとかの扱いはどうなるだろう。
882がhoge.tar.gzからhogeにしたいのかhoge.tarにしたいのかよくわからんけど。
0888デフォルトの名無しさん
2006/10/13(金) 01:38:180889デフォルトの名無しさん
2006/10/13(金) 01:57:59char * basename(const char * path)
{
if (path == NULL) return NULL;
const char * dot = strrchr(path, '.');
if (dot == NULL || dot == path) return path;
* dot = '\0';
return path;
}
0890デフォルトの名無しさん
2006/10/13(金) 02:04:000891デフォルトの名無しさん
2006/10/13(金) 02:05:51Javaの方がいいぞ。
0892デフォルトの名無しさん
2006/10/13(金) 02:13:12そうですか
いい発見ができてよかったですね
0893デフォルトの名無しさん
2006/10/13(金) 02:19:08返信がつまらん。
やり直し
0894デフォルトの名無しさん
2006/10/13(金) 03:22:04環境:Linux(GCC)
Linuxのタイマの分解能は10msecで、nanosleepの引数
timespecのtv_secに0、tv_nsecに10を入れても10msec+プロセス復帰のための
10msecで合計20msecがスリープの最短だと聞きました。
また同時に、この制限を取り払うハイレゾタイマというのを聞きました。
ぐぐったところclock_nanosleepというシステムコールとlibposixtime.soをリンク
させれば良いらしいというところまでは分かりました。
このclock_nanosleepについて教えて下さい。
4つの引数のうち後半2個はnanosleepと同じだと思いますが、前半二個
特に1個目がどうにも分かりません。
友人はCLOCK_REALTIME_HRでと言ったのですが、未定義になります。
ぐぐるとCLOCK_REALTIMEかCLOCK_MONOTONICしか指定するなと
書いてある気がします。
二個目の引数も良く分かりませんが、二個目はTIMER_ABSTIMEで良いような気がします。
1個目と二個目について何が正しいのかご教授下さい。
0895デフォルトの名無しさん
2006/10/13(金) 03:44:01代わりにCLOCK_MONOTONIC_HRを使用するよろし。
二個目はその通り。
TIMER_ABSTIMEを入れなされ。
0896デフォルトの名無しさん
2006/10/13(金) 11:38:28作ろうとしたのは0〜100までの偶数を表示するプログラムです。
どこが違うのか教えてください。
#include <stdio.h>
int main<void>
{
int s;
for(s=0;s<=100;s=s+2)
{
printf("%d\n",s);
}
printf("\n");
s=0;
while(s <= 100)
{
s=s+2;
printf("%d\n",s);
}
return 0;
}
Cは本当に始めたばかりの初心者です。お願いします。
0897デフォルトの名無しさん
2006/10/13(金) 12:08:15複文
}
と等価にするには、
初期化部
while (継続条件) {
複文
更新部
}
とすればよい。つまり、
s = 0;
while (s <= 100) {
printf("%d\n", s);
s += 2;
}
となる。
0898デフォルトの名無しさん
2006/10/13(金) 12:09:18{
printf("%d\n",s);
s=s+2;
}
だと思う
Cは本当に始めたばかりの初心者です。実はよく分かりません。
0899デフォルトの名無しさん
2006/10/13(金) 12:12:31?
0900デフォルトの名無しさん
2006/10/13(金) 12:32:080901デフォルトの名無しさん
2006/10/13(金) 13:34:23無視しないと、別のライブラリと衝突するのです
どうしたらいいですか?
0902デフォルトの名無しさん
2006/10/13(金) 13:37:45マルチスレッドDLLをマルチスレッドにしたら良かったン
何故 VCのデフォルトは、マルチスレッドDLLですか?
0903デフォルトの名無しさん
2006/10/13(金) 13:40:53そういう問題ではないと思う。
0904デフォルトの名無しさん
2006/10/13(金) 13:42:37my_rand(int max)
{
return clock() % (max + 1);
}
0905デフォルトの名無しさん
2006/10/13(金) 13:48:390906デフォルトの名無しさん
2006/10/13(金) 14:19:10ありがとうございます。できました。
>>899
ここはいつもvoidじゃないんですか?知らずにいつも入れていましたが…
( )と(void)の違いってなんですか?
0907デフォルトの名無しさん
2006/10/13(金) 14:28:33あといつもvoidなわけじゃない。コマンドライン等から引数を取るプログラムは
int main(int argc, char *argv[]){
/* 略 */
}
等となる。
0908デフォルトの名無しさん
2006/10/13(金) 14:29:15そんな君にお勧めな実装
int real_rand()
{
static int x = 0 ;
return x ;
}
もし、アルファ線や中性子線が、たまたまxの部分のメモリにぶつかれば、値が変わる。
これぞ真の乱数といえる。
0909デフォルトの名無しさん
2006/10/13(金) 14:56:570910デフォルトの名無しさん
2006/10/13(金) 15:18:45あほか
そんな強い放射線が当たったら、CPUやメモリやチップセットが全部壊れるわ
0911デフォルトの名無しさん
2006/10/13(金) 15:21:55randつかえたんのんよ
0912デフォルトの名無しさん
2006/10/13(金) 16:09:15いや、まあ、起こりえない確率じゃないんだよ。
ttp://en.wikipedia.org/wiki/Soft_error
宇宙船の影響でね。
0913912
2006/10/13(金) 16:09:47○宇宙線
0914デフォルトの名無しさん
2006/10/13(金) 16:36:47として、文中に
int i = TMP_SIZE-1;
とあった場合、コンパイルの時に“TMP_SIZE-1”の部分は
“255”と最適化される“可能性”はあるのでしょうか?
(コンパイラによりけりという話は置いておくとして)
それとも、こういう時は“256-1”にしておかなければ
いけないなどの決まりなどがあるのでしょうか?
常識なのかもしれませんが、勉強したてで解りません。
調べたサイトなどを見つける事がきませんでした。
すみませんがお教えください。
0915デフォルトの名無しさん
2006/10/13(金) 16:39:370916デフォルトの名無しさん
2006/10/13(金) 16:41:430917デフォルトの名無しさん
2006/10/13(金) 16:43:47ありがとうございます。
気になっていたモヤモヤが取れました。
0918デフォルトの名無しさん
2006/10/13(金) 16:51:40できのわるい乱数になるなw
0919デフォルトの名無しさん
2006/10/13(金) 17:12:21VC6.0+WINです
struct info
{
info ()
{
pBody = new char [255];
}
int iType;
char* pBody;
}
こんな感じで構造体を定義ていおいて
void test (info* p)
{
strcpy (p->pBody,"kk");
}
関数内で使おうとすると例外エラーがでます
これは どのように解決すればよいのでしょうか?
おねがい いたします
0920デフォルトの名無しさん
2006/10/13(金) 17:16:14なるほど、ありがとうございました。
0921デフォルトの名無しさん
2006/10/13(金) 17:25:16{
char* pBody;
info ()
{
pBody = new char [255];
}
int iType;
}
だと思う。
Cは本当に始めたばかりの初心者です。実はよく分かりません。
0922デフォルトの名無しさん
2006/10/13(金) 17:28:390923デフォルトの名無しさん
2006/10/13(金) 17:31:01構造体宣言の{}の最後に「;」がついてない
あとvoid test (info* p)じゃなくてvoid test (struct info* p)?じゃね?
あと構造体はちゃんとインスタンス化したか?
0924デフォルトの名無しさん
2006/10/13(金) 17:31:570925923
2006/10/13(金) 17:46:50>あとvoid test (info* p)じゃなくてvoid test (struct info* p)?じゃね?
これはいらなかった
0926919
2006/10/13(金) 18:07:13書式に関しましては申し訳ありません・・
void test (char* p)
{
p = new char [255];
}
この形はできないのは承知してるのですが
これに類する問題なのでしょうか?
void test (char** p)
{
*p = new char [255];
}
0927デフォルトの名無しさん
2006/10/13(金) 18:13:38info* p;
test(p);
上のようにしているならダウト。実体を用意しろ。
info infomation;
test(&infomation);
ここでは、926は関係ない。
あと、pBodyがきちんと解放されるように対策を講ずるべき。
0928デフォルトの名無しさん
2006/10/13(金) 19:15:320929919
2006/10/13(金) 19:39:56はい 実際はそのようにおこなってます
また、構造体のiTypeに与えてある値はきっちりとれます
開放はデストラクタで行っています
説明不足ですみません。
0930デフォルトの名無しさん
2006/10/13(金) 19:41:17しーーーっ、ちょっとこちに来て、そんなこと、言っちゃだめよ、ヒソヒソ。
0931デフォルトの名無しさん
2006/10/13(金) 20:16:461.info(){printf("コンストラクタ");} とかしてみて本当にコンストラクタが実行されてるか確認する
2.本当にstrcpy実行時にエラーが出ているのか確認する
3.それだけの情報じゃエラー原因がわからないかもしれないので他の情報もここに書き込んでみる
0932デフォルトの名無しさん
2006/10/13(金) 20:23:09FILE *a,*b,*c;
a=fopen("hogehoge1.txt","r");
b=fopen("hogehoge2.txt","r");
c=fopen("hogehoge3.txt","w");
と3つのファイルを開きたいのですがhogehoge3.txtが開けません
c==NULLです
これはアクセスできるファイルの数に限りがあるということですか?
0933デフォルトの名無しさん
2006/10/13(金) 20:26:353つがMAXということはない
0934デフォルトの名無しさん
2006/10/13(金) 20:29:58サンプルを移したものなんですが、ときどきバグって変な文字列を返してきます。
どこが悪いんでしょうか?
char *quicksort(char *pa,int len){
char t;
int i,j;
if(len == 2){
if(*pa > *(pa+1)) swap(pa,pa+1);
}else if(len > 2){
t = *(pa+len / 2);
i = -1;
j = len;
while(i < j){
while (*(pa+(++i)) < t);
while (*(pa+(--j)) > t);
if (i < j ) swap(pa + i,pa + j);
else if (i == j){
quicksort(pa,i);
quicksort(pa+i+1,len-i-1);
}else{
quicksort(pa,j+1);
quicksort(pa+i,len-1);
}
}
}
return pa;
}
0935デフォルトの名無しさん
2006/10/13(金) 20:31:57トン。ほかにエラーがあるということですね、調べてみます
0936デフォルトの名無しさん
2006/10/13(金) 20:42:16perror() とか使ってみるといいよ。
0937デフォルトの名無しさん
2006/10/13(金) 20:58:39「ときどき」 って事は、正常に動作する場合もあるんだな?
どんな文字列を与えた時にバグるのか教えてくれ。
それとも、同じ文字列を与えてるのに動いたりバグったりするのか?
0938デフォルトの名無しさん
2006/10/13(金) 21:22:17読み込み専用のhogehoge3.txtが存在しているとか。
0939デフォルトの名無しさん
2006/10/13(金) 21:23:58ここじゃね?
quicksort(pa+i,len-1);
たぶん
quicksort(pa+i,len-j-1);
0940デフォルトの名無しさん
2006/10/13(金) 21:45:10どうもありがとうございます。
ちゃんと動きました。
0941デフォルトの名無しさん
2006/10/13(金) 23:01:14ディレクトリに書き込み権限がないとか。
0942デフォルトの名無しさん
2006/10/14(土) 00:44:38奴の流行では、時間は昔のまま進んでないんだろうな。
0943デフォルトの名無しさん
2006/10/14(土) 01:03:55#include <stdio.h>
int main(void)
{
int i,ia[6]={2,1,2,3,4,100},*pt=ia;
for(i=0;i<5;i++)*++pt=*pt**pt;
pt=ia;
for(i=0;i<6;i++)printf("%d\n",*pt++);
return 0;
}
実行結果
2
1
4
9
16
10000
0944943
2006/10/14(土) 01:04:31#include <stdio.h>
int main(void)
{
int i,ia[6]={2,1,2,3,4,100},*pt=ia;
for(i=0;i<5;i++)*pt++=*pt**pt;
pt=ia;
for(i=0;i<6;i++)printf("%d\n",*pt++);
return 0;
}
実行結果
4
1
4
9
16
100
0945943
2006/10/14(土) 01:05:53#include <stdio.h>
int main(void)
{
int i,ia[6]={2,1,2,3,4,100},*pt=ia;
for(i=0;i<5;i++)printf("%d\n",*pt**++pt);
return 0;
}
実行結果
1
4
9
16
10000
0946943
2006/10/14(土) 01:06:36#include <stdio.h>
int main(void)
{
int i,ia[6]={2,1,2,3,4,100},*pt=ia;
for(i=0;i<5;i++)printf("%d\n",*pt**pt++);
return 0;
}
実行結果
2
2
6
12
400
Cを勉強し始めてもうすぐで1月になるものですが、質問させてください。
この4つのコードなのですが、ポインタと前置・後置インクリメントを理解するために
作成しました。
コード3までは自分の考え方と実行結果が一致したのですが、コード4の実行結果が
自分の考えと違いちょっと混乱しています。
自分の考えでは
5行目のprintf関数の引数となっている*pt**pt++の「*pt++」の部分が、今回の場合後置インクリメント
なので、*pt * *ptの結果を%dに返した後でpt+1されると思っていましたが、実行結果を見てみると
*pt * *(pt+1)となっているようです。(計算中にすでにpt++の部分が演算されているのかな?)
この結果は前置インクリメントの場合とも違っていていったいどうなっているのかが理解できません。
(前置インクリメントの場合は*(pt+1) * *(pt+1)になると思ってます)
このあたりに詳しい方、なぜこのようになるのかを教えてください。お願いします。
0947デフォルトの名無しさん
2006/10/14(土) 01:17:16> *pt**pt++
鼻から悪魔
0948デフォルトの名無しさん
2006/10/14(土) 01:20:05普通はそんなの悩まないで括弧をつける
前置インクリメントと単項*は左から右へ結合、同じ優先順位
後置インクリメントはそれよりも優先順位が高い右から左への結合
演算子の優先順位で調べてみな
0949デフォルトの名無しさん
2006/10/14(土) 01:46:03>>943の使っているコンパイラの結果のほうが、個人的には分かりやすいのだけれど。
評価順序は、
(*pt) * (*(pt**))
こうだと思うけれどあっているかな。
乗算の左側と右側のどちらが先に評価されるかで、結果が変わると思うのだけれど、
この順序が未定義?
0950949
2006/10/14(土) 01:46:430951デフォルトの名無しさん
2006/10/14(土) 02:25:00fprintf(stdout, *****)の構文を見る限り、stdoutもある種のFILE*だと思うのですが、
fclose(stdout)って出来ますか?
また、その後別のファイル名でstdout = fopen(別のファイル名,"w")とか出来ますか?
0952デフォルトの名無しさん
2006/10/14(土) 02:47:040953943
2006/10/14(土) 04:14:57レスありがとうございます。
>>948
一応カッコをつけなかったのはつけなかったときにどういう動作をするか見てみたかったからです。
優先順位と結合法則については手持ちの参考書に書いてあるのですが、
間接参照の*も++も--もすべて同じ優先順位で右→左の結合(右結合)とかかれていました。
(++と--は前置とか後置とか区別されてませんでした)
たとえばコード1の5行目のfor文*++pt=*pt**ptで考えてみると、
間接参照の*と前置インクリメントが優先順位が高くなりますよね。
で、二つとも右結合だから一番右端の*ptそして乗算*をはさんで左にある*pt、
最後に*++ptの順番に演算していくことになります。つまり
(*(pt+1))=(*pt)*(*pt)
配列のアドレスに直すと、
(*&ia[1])=(*&ia[0])*(*&ia[0])
になり、結果が合いません…。
おっしゃるように「前置インクリメントと間接参照の*は同じ優先順位で左結合
後置インクリメントが前者二つより優先順位が高く右結合」が正しく参考書が
間違えているぽいですね。ただ、同じようにコード1でやってみると、
*++pt=*pt**ptなので
参考書の考え方と同じく優先順位は間接参照の*と前置インクリメントが高くなります。
ただし結合法則が左結合になるため、まず++pt→*(++pt)→代入演算子の右にある*pt
→右端の*ptの順で演算していくとこになります。つまり
(*(pt+1))=(*(pt+1))*(*(pt+1))になって、配列の形にすると
(*&ia[1])=(*&ia[1])*(*&ia[1])になり、結果が合います。
ただこの場合は、式にカッコをつけて*++pt=(*pt)*(*pt)とした場合でも、
実行結果がカッコをつけなかった場合と同じになってしまいます…orz
もうわけがわかりません…
0954943
2006/10/14(土) 04:16:10(*pt)*(*(pt++))の場合
もし乗算演算子*の右側から評価されれば
(*(pt+1))*(*(pt+1))になって
乗算演算子*の左側から評価されれば
(*pt)*(*(pt+1))になるってことでしょうか?
そもそも後置インクリメントは式の値を返した後に代入するものだとおもってました。
0955デフォルトの名無しさん
2006/10/14(土) 09:33:36演算子の優先順位と結合法則から、(*(++pt))=(*pt)*(*pt) となることについての理解は正しい。
>二つとも右結合だから一番右端の*ptそして乗算*をはさんで左にある*pt、
>最後に*++ptの順番に演算していくことになります。
これは正しくない。
右結合というのはたとえば a=b=c=d が a=(b=(c=d)) と右側から順に結合するということ。
2項(or3項)演算子の非演算子が、どれから順に評価されるかは(一部の例外を除き)未定義。
つまり、A=B*C という式のA, B, C それぞれの部分がどの順序で評価されるかは決まっていない。
++pt と *pt のどっちが先に評価されるかで、結果は変わる。
上で書いた一部の例外というのは &&, ||, ,(カンマ演算子)の3つ。
これらは非演算子が左、右の順で評価されることが決まっている。
>>954
これも、
>そもそも後置インクリメントは式の値を返した後に代入するものだとおもってました。
pt++ を評価するとその値は pt であり、pt自身はインクリメント(+1)される。
ただし、ptがインクリメントされるタイミングは、pt++の評価後であって、
式全体(*pt)*(*(pt++))の評価後ではない。
pt++が評価されるのが*ptより先かもしれないし、後かもしれない。
0956デフォルトの名無しさん
2006/10/14(土) 13:37:45まずは↓読め
http://www.kouno.jp/home/c_faq/c3.html#0
>955
未定義だと鼻から悪魔を思い浮かべるので、評価順序の場合は未規定か不定と書くのが望ましいと思う。
0957デフォルトの名無しさん
2006/10/14(土) 13:52:29「不定」は違うだろ。
0958デフォルトの名無しさん
2006/10/14(土) 14:55:56未定義 HDD消されても知らんぞ
とかの方がわかりやすいよね
0959デフォルトの名無しさん
2006/10/14(土) 16:05:500960943
2006/10/14(土) 16:57:33レスありがとうございます。
お恥ずかしいことに色々と勘違いしていたようです。
>>955
なるほど、右結合や左結合の捉え方を誤っていたようですね。
よくわかりました。
皆様ご丁寧にありがとうございました。
0961デフォルトの名無しさん
2006/10/14(土) 17:45:39class hoge
{
private:
foo* mpFoo;
public:
(略)
void set( int val) { if (mpFoo) mpFoo->set(val); }
void set( double val) { if (mpFoo) mpFoo->set(val);}
};
class fooはintとdoubleのどちらの型のデータを持っているか判る
数値情報を持つクラスです。
hoge::set()の場合は1行で書けますが、
他にもまったく同じ処理なのに、
引数の型が違うだけのメソッドがいます。
これをint,doubleで2回づつ書くのではなく、
1回で済ます方法は無いでしょうか?
0962デフォルトの名無しさん
2006/10/14(土) 17:50:21template
0963デフォルトの名無しさん
2006/10/14(土) 18:01:57設計を見直す。
0964デフォルトの名無しさん
2006/10/14(土) 18:11:42自分のサイズよりも大きな構造体のポインタに対するキャストが
うまく動くかどうかは実装依存でしょうか?
例えばこんなコードです
#include<stdio.h>
struct mydata{int a,b,c,d;};
int main(){
int *p;
mydata da={1,2,3,4};
p = (int *)&da;
printf("%d %d %d %d\n",((mydata*)p)->a,((mydata*)p)->b,((mydata*)p)->c,((mydata*)p)->d);
return 0;
}
0965デフォルトの名無しさん
2006/10/14(土) 18:16:290966961
2006/10/14(土) 18:38:30具体的にどう書けばいいんでしょうか?
プログラミング言語c++を読んでみたのですが、自分には書き方が判りませんでした。
>>963
やっぱり設計を変えたほうがいいですか。
int,doubleを受け取るんじゃなくて、fooのようなクラスfooArgを受け取るようにして、
hoge::set(1) が hoge::set( fooArg(1)) に自動変換するようにすればいいとか?
0967962
2006/10/14(土) 18:50:48class hoge {
private:
foo* mpFoo;
public:
template<class T>
void set(T val) { if (mpFoo!=NULL) mpFoo->set(val); }
};
0968961
2006/10/14(土) 19:18:59ありがとうございます。動きました。
class hogeの前にtemplate書いてみたり、メソッドの宣言は普通に型を指定して、
実体の方だけだけtemplateをつけて動かなかったのです…
0970デフォルトの名無しさん
2006/10/14(土) 21:00:25その例だとキャストする意味が分からん。
キャストしないで済ませられないか、よく考えてから使えよ。
0971デフォルトの名無しさん
2006/10/14(土) 21:08:57>>964は「自分のサイズよりも大きな構造体」
って書いてるから例が今ひとつなだけで、こういうことを言いたいのでは?
#include<stdio.h>
struct mydata{int a,b,c,d;};
struct mydata2{int a,b,c,d,e;}
int main(){
mydata2 *p;
mydata da={1,2,3,4};
p = (mydata2 *)&da;
printf("%d %d %d %d\n",p->a,p->b,p->c,p->d);
return 0;
}
まあWindowsではこれが出来なかったらメッセージのやり取りが出来ないけどな。
0972デフォルトの名無しさん
2006/10/14(土) 21:15:50それは実装依存かな。少なくとも正しく動作する保証は無いだろう。
0974デフォルトの名無しさん
2006/10/14(土) 21:24:28アライメントが不正な場合に未定義動作となることは規格に明記されている。
0976デフォルトの名無しさん
2006/10/14(土) 21:32:58現在、サーバ側がどうにかしてIPを調べクライアント側に伝え、
クライアントがサーバのIP・ポートを手入力して繋いています。
それをサーバ側がロビーサーバに登録し、クライアントがロビーサーバにアクセスしてクリックだけで接続できるようにしたいと考えています。
その際、サーバ側のグローバルIPをプログラムで取得してロビーサーバに保存させたいのですが、
どうすればグローバルIPを取得することが出来るのでしょうか。
0977デフォルトの名無しさん
2006/10/14(土) 21:47:30構造体へのポインタは先頭要素の型へのポインタにキャストして平気であるという規定があったはず。
0978デフォルトの名無しさん
2006/10/14(土) 21:49:56964 はその規定にかかわらず、元の型に戻してから使ってるので問題ない。
0979964
2006/10/14(土) 21:54:22レスありがとうございます
すみません、例が悪かったですね
971さんの仰るとおりウィンドウメッセージ関連です
規格上は未定義なんですねorz
必要になった状況というのは
ユーザ定義メッセージを送るPostMessageの引数です
自作コントロールでWM_APP_HOGEHOGEを定義して
PostMessageの引数のLPARAMに受け渡すデータを
パックして送ろうとしたんですが
私の環境では、LPARAMはlong型なので
mydata(受け渡し用データ)のほうがかなりサイズが大きく、
こういったキャストを利用してよいものかと思い質問しました
WEBでWM_USERやWM_APPの使い方を調べても、
WPARAMやLPARAMにデータを入れて送っている例がなかなか見つからないので
直接キャストしてみたらとりあえずは動いているようです
けど不備があったら嫌だな^^;
もしかしてLPARAMがlongなのは、ポインタのサイズと関係があるんですかね
0980964
2006/10/14(土) 21:59:17>構造体へのポインタは先頭要素の型へのポインタにキャストして平気であるという規定があったはず。
なるほど、参考になります
(LPCREATESTRUCT)lParamといったコードがあるので
LPCREATESTRUCTについて調べてみたところ
tagCREATESTRUCTの最初の引数はLPVOID (void *)でした
ということは、データを受け渡しを考えた時は
構造体の最初のメンバに気を配らないとダメなのでしょうか?
0982デフォルトの名無しさん
2006/10/14(土) 23:00:01ロビーサーバに訊いたら駄目なのか
0983デフォルトの名無しさん
2006/10/14(土) 23:21:12LPARAMは単なる整数型だ。
ポインタ型をポインタ型以上の大きさを持つ整数型に変換して、また元のポインタ型に戻して使うのは問題ない。
現在LPARAMは、ポインタ型と同じ大きさを持つ符号有り整数型と定義されている。
0984976
2006/10/14(土) 23:25:25サーバA サーバB サーバになる人がロビーサーバで登録
登録↓ ↓登録
[ロビーサーバ] ロビーサーバがサーバのIP・ポートを保持し、クライアントに表示させる(名前+ボタンとか)
参照↑ ↑↑ ↑参照
クラA || クラD クライアントはロビーサーバにアクセスし、
クラB クラC 行きたいサーバのボタンを押して接続
ロビーサーバに聞くとしても、サーバ側のIPを受け取らないといけませんよね。
サーバ側のグローバルIPの取得方法がわからず、IPを渡すという作業が出来ずに詰まっていて躓いている状態です。
0985デフォルトの名無しさん
2006/10/15(日) 00:33:370986デフォルトの名無しさん
2006/10/15(日) 00:39:320987デフォルトの名無しさん
2006/10/15(日) 00:45:410988デフォルトの名無しさん
2006/10/15(日) 00:53:16http://pc8.2ch.net/test/read.cgi/tech/1159692799/l50
0989デフォルトの名無しさん
2006/10/15(日) 01:40:18#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define SIZE 20
int Scores[SIZE]; /*グローバル変数宣言*/
int max(int a, int b)
{
if(a<b) return b;else return a;
}
int min(int a, int b){
if(a<b) return b;else return a;
}
int main(void){
int i;double ave,sum;
srand(894u);
for (i=0; i<SIZE; i++)
Scores[i] = (int)(rand()/(RAND_MAX+1.0)*301)-100;
for (i=0; i<SIZE; i++){
Scores[i]=min(Scores[i],0);
Scores[i]=max(Scores[i],100);}
for (i=0; i<SIZE; i++){
sum += (double)Scores[i];}
ave =sum/SIZE;
printf("Answer is %6.2f.\n",ave);
return 0;}
バクがわかりません。教えていただけないでしょうか?
0990デフォルトの名無しさん
2006/10/15(日) 01:48:460991デフォルトの名無しさん
2006/10/15(日) 01:51:31max、min関数を宣言する前に
#undef max
#undef min
と追加するか、max関数とmin関数自体を削ると通るはず。(bcc5.5なら)
しかしそのコーディングスタイルはなんかの苦行か?
0992デフォルトの名無しさん
2006/10/15(日) 01:57:370993デフォルトの名無しさん
2006/10/15(日) 02:02:58#undef追加したらエラー出なくなったよ
0994デフォルトの名無しさん
2006/10/15(日) 02:12:31追加した所、通りました。
関数名を変えても通りました(^^)v
このコーディングは、掲示板が生み出したて感じですねw。
>> 驚きです(゜o゜)。
0995デフォルトの名無しさん
2006/10/15(日) 02:19:080996デフォルトの名無しさん
2006/10/15(日) 02:34:26Windows.hをincludeすると、min, maxというマクロがあるのは知っていたが。
でも何故なんだろう。
STLならnamespaceに入っているはずだし。
0997デフォルトの名無しさん
2006/10/15(日) 04:29:00initされ、unlock状態のmutexをlockしようとするとプロセスが落ちるのですが、
理由は何が考えられるでしょうか。
siginfo.txtによると、SIGSEGV(BADADRS:0x00000000)です・・・
0998デフォルトの名無しさん
2006/10/15(日) 05:09:230999デフォルトの名無しさん
2006/10/15(日) 06:30:541000小倉優子 ◆en0rG2J.f6
2006/10/15(日) 06:31:2510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。