トップページ⇒tech
1001コメント289KB

【初心者歓迎】C/C++室 Ver.26【環境依存OK】

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2006/03/29(水) 11:59:26
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん2006/03/29(水) 12:54:28
新スレおめでとうございます
0003デフォルトの名無しさん2006/03/29(水) 13:36:07
>1
おつ
0004デフォルトの名無しさん2006/03/29(水) 16:13:06
ポインコが4ゲツ
0005デフォルトの名無しさん2006/03/29(水) 18:53:53
>1
乙
>前1000
GJ
0006デフォルトの名無しさん2006/03/29(水) 20:42:48
otu
0007デフォルトの名無しさん2006/03/30(木) 22:02:04
VisualC++6.0でGUI作るのって…めんどくさすぎない?
当方VC6.0しか環境が無く。どうにか、これでRAD的に簡単にGUI組んでいく方法ない?
0008デフォルトの名無しさん2006/03/30(木) 22:09:05
VC++Expressを入れてみるとか
0009デフォルトの名無しさん2006/03/30(木) 22:16:55
IEコンポーネントはっつけてGUIデザインはHTMLで。
0010デフォルトの名無しさん2006/03/30(木) 22:50:35
>>8
ごめん。せっかくだけどSP2入れれないから、俺無理だった。。。

>>9
そんなことが出来るのか。

思ったんだけど、EcllipseにGUIエディタ入れて、C++のも入れて編集したりとかできないかな
つか、VCでのGUIの組み方を親切丁寧に教えてくれてるサイトって無いものか
0011デフォルトの名無しさん2006/03/30(木) 23:51:49
>>7
ツールバーとかつけるだけでも大変だけど、
それを簡単に作れるようにマイルーチンを鍛えていくのが楽しい。
0012デフォルトの名無しさん2006/03/30(木) 23:59:12
>>7
ダイアログエディタはそんなに使いづらかった?
0013デフォルトの名無しさん2006/03/31(金) 00:50:35
WideStudioってどうだっけ?
0014デフォルトの名無しさん2006/03/31(金) 11:04:04
>>12
メニュー付きで編集できるなら良かったのだけど(ダイアログ
画像(BMP〜PSDくらいまで)を単純にファイル選択ウィンドウから開いて
加工して、プレビューで見せて任意形式で保存するようなアプリにしたいのだけど
0015デフォルトの名無しさん2006/03/31(金) 13:37:34
>>14
つ[ImageMagick]
0016デフォルトの名無しさん2006/03/31(金) 21:46:15
14だけど、結局窓を開かないで
初めからダイアログボックスにメニューをつけて画像開くようにしようとおもう
ところでピクチャボックスにファイル開いて画像の表示って出来るかな

>>14
やりたいことがあるから既存のソフトウェアは。。。
0017デフォルトの名無しさん2006/03/32(土) 01:56:01
基本クラスオブジェクトへのポインタを通じて派生クラスへアクセスする事があるから、
デストラクタはvirtual宣言しておくべきだと言えるのですか?
0018デフォルトの名無しさん2006/03/32(土) 02:09:28
日本語でおk
0019162006/03/32(土) 02:20:53
ブロークン日本語ですかね?
0020172006/03/32(土) 02:21:42
16じゃなかた。(*´J`)
0021デフォルトの名無しさん2006/03/32(土) 02:33:51
class A{
void make_obj_b;
};

void A::make_obj_b;(){
obj_b B;
]

class B{
}

void

int main (){
obj_a A;
obj_a::make_obj_b;
// <-ココ
return;
}

とした場合、コメントの場所でobj_bは破棄されてしまいます。
obj_aが生きている間はobj_bを保持する方法などはありますか?

0022デフォルトの名無しさん2006/03/32(土) 02:37:25
>>21
集約の関係にする。
お前はOOPのなんたるかを勉強し直せ
0023デフォルトの名無しさん2006/03/32(土) 02:43:17
>>22
thx.
0024172006/03/32(土) 03:51:45
何故デストラクタを出来る限りvirtualにした方が良いかというと、
それは、基本クラスオブジェクトへのポインタを通じて派生クラスオブジェクトへアクセスする事例を考慮しての事ですか?
0025デフォルトの名無しさん2006/03/32(土) 03:53:35
日本語でおk
0026デフォルトの名無しさん2006/03/32(土) 03:54:18
意味がよくわからんが、アップキャストされてるポインタをdeleteしたときに
サブクラスのデストラクタを呼ぶため
0027172006/03/32(土) 04:17:28
日本語に自信が無くなりました。。。
0028172006/03/32(土) 04:19:40
基本クラスオブジェクトへのポインタを通じて派生クラスオブジェクトへアクセスする事を
アップキャストと言うのですね。
勉強になりました^^
0029172006/03/32(土) 04:20:52
基本クラスオブジェクトへのポインタを通じて派生クラスオブジェクトへアクセスする事を
アップキャストと言うのですね。
勉強になりました^^
独習C++では教えてくれませんでした><
0030デフォルトの名無しさん2006/03/32(土) 04:27:07
>>29
アップキャストは「アクセスすること」じゃなくて、
アクセスするためにポインタや参照を変換することを言う。
0031デフォルトの名無しさん2006/03/32(土) 05:54:40
なんで派生クラスのポインタを基本クラスのポインタにキャストしたのに、
そこから仮想関数呼んだらまだ派生クラスの関数の方を呼ぶんですか?
0032デフォルトの名無しさん2006/03/32(土) 05:57:23
そういうことをするために仮想関数が存在する
この動作が気に食わないならvirtualせずにオーバーライドしとけ
0033デフォルトの名無しさん2006/03/32(土) 06:03:27
実行時にどちらを指してるか判断して、それようの方を呼ぶ機構がvirtualによるオーバーライドなのではないのですか?
今は基本クラスのオブジェクトを指してる筈だから、基本クラスのvirtualついた方を呼ぶべきだと思います><
0034デフォルトの名無しさん2006/03/32(土) 06:08:21
>>33
日本語でおk
0035デフォルトの名無しさん2006/03/32(土) 06:12:49
ムキー!#><#
0036デフォルトの名無しさん2006/03/32(土) 06:14:16
ポリモーフィッククラスがマスターできません><
0037デフォルトの名無しさん2006/03/32(土) 06:26:31
>>36
日本語でおk
0038デフォルトの名無しさん2006/03/32(土) 06:29:47
>>37
どうせあんたなんか朝生でも見て暇を持て余してたんでしょ!
で、変なの居るから適当にいじめてやろうって魂胆でしょ!?><
0039デフォルトの名無しさん2006/03/32(土) 06:53:55
あれ?virtualせずにオーバーライド?

もうvirtualの存在意義とか混乱して分からなくなりました><
0040デフォルトの名無しさん2006/03/32(土) 07:19:23
virtualをつけるとアップキャストした場合でも、ダウンキャストした場合でも、継承クラスの方を使うという認識でいいですか?

んで、ダウンキャストしたら基本クラスの方を使いたいなら
virtual無しオーバーライドにすると。
0041デフォルトの名無しさん2006/03/32(土) 07:21:29
>>33
>呼ぶべきだと思います><
派生クラスの関数を呼ぶためにvirtual にしてるんだから何もおかしくないだろ
0042デフォルトの名無しさん2006/03/32(土) 07:26:55
そうか!virtualだからこそ、できるだけ呼び出しはリアルの方にするという事か!
0043デフォルトの名無しさん2006/03/32(土) 07:32:25
ダウンキャストしても継承クラスのデータが残ってるのが気持悪いです。
キャストの仕組みが理解できてないのだと思います。
0044デフォルトの名無しさん2006/03/32(土) 07:47:25
とりあえず、修飾子virtualをつけてない場合のオーバーライドの動作を理解しろ
0045デフォルトの名無しさん2006/03/32(土) 08:05:47
理解しました。
vitualつけてないと、ダイナミックキャストで継承クラスのポインタを得たりしない限り
アップキャストしても基本クラスの関数呼び出しです。
継承クラスのオブジェクトのポインタからダイナミックにダウンキャストした場合でも
基本クラスの関数を呼び出します。

vitualをつけると、キャストがアップダウン関わらずvirtualがついてない方を呼び出すよう努力します。
0046デフォルトの名無しさん2006/03/32(土) 09:16:06
Visual C++ .NET 逆引き大全 500の極意を読んで
C++の学習をしています、クラスライブラリを作って見たいのですが
どういうライブラリを製作していいか思いつきません
皆さんがC++を学んだ当初どのようなライブラリを作られましたか?
題材のヒントをもらえないでしょうか
0047デフォルトの名無しさん2006/03/32(土) 09:37:07
何桁でも計算できるライブラリ
0048デフォルトの名無しさん2006/03/32(土) 12:49:58
内部でint配列使ってどうこうやるってやつ?
0049デフォルトの名無しさん2006/03/32(土) 12:59:10
GNU ncursesで日本語表示をするやり方を教えてください。
環境はcygwinです。
configure --enable-widecの後makeしたncursesを使っています。
コンパイルはgcc test.c -lncurseswです。。
printwもaddwstrも文字化けしてしまいします。
コンソールプログラムのprintf("こんにちは");は正常に表示されています。
0050デフォルトの名無しさん2006/03/32(土) 18:27:51
普通のキャストとstatic_castの違いが分かりません><
0051デフォルトの名無しさん2006/03/32(土) 18:34:26
static_cast=性的なキャスト=(;´Д`)ハァハァ
0052デフォルトの名無しさん2006/03/32(土) 18:34:28
C++で、
A(char *x){.....}
B(){char x[]=(..);....A(x)...}
としたら、'char *' 型は 'char[]' 型に変換できない エラーになりました
どうしたらいいですか
0053デフォルトの名無しさん2006/03/32(土) 18:39:25
せめてC++で書けよ・・何でそんなに頭悪いんだよ・・・・・・
0054初心者2006/03/32(土) 18:41:17
>>52
char x[]
を
char* x[]
にしたら良いんじゃないの?
0055デフォルトの名無しさん2006/03/32(土) 18:49:03
>>50
とりあえずstatic_cast。
それで駄目ならreinterpret_castかconst_cast。
C形式のキャストは出番無し。
0056dynamic_cast2006/03/32(土) 18:53:51
(´・ω・`)ショボーン
0057初心者2006/03/32(土) 19:07:38
違うな
>>52
A(char **x){.................}
だとどうかな?

char x[]=(.........)のxはポインタポインタのレベル?だから
入れる方も**にしてポインタポインタにしないといけないんじゃないかな?
0058502006/03/32(土) 19:08:13
>>55
intをただunsignedにするだけでもわざわざstatic_castするんですか?
0059デフォルトの名無しさん2006/03/32(土) 19:30:55
>>58
するよ。
0060デフォルトの名無しさん2006/03/32(土) 19:47:11
>54,57
帰れ
0061502006/03/32(土) 19:53:22
>>59
あり^^
0062522006/03/32(土) 20:02:44
あの、エイプリルフールでしたっけ?
0063デフォルトの名無しさん2006/03/32(土) 20:24:41
コンテナはコンテナを格納できないのですか?
代わりにコンテナへのポインタを格納するようにするのですか?
0064デフォルトの名無しさん2006/03/32(土) 20:25:34
>>63
vector<vector<int> > vv;
とかそういう事?
0065632006/03/32(土) 20:27:30
はい
0066デフォルトの名無しさん2006/03/32(土) 20:35:47
>>65
で、>>64のような書き方ではコンパイルエラーが出るの?
ポインタを入れたいのはなぜ?
0067デフォルトの名無しさん2006/03/32(土) 20:36:06
>>52
略し過ぎ。
さっぱり分からん。
0068デフォルトの名無しさん2006/03/32(土) 20:36:40
vector<vector<int>> vv; と書いてるに一票。
0069デフォルトの名無しさん2006/03/32(土) 20:45:19
>>60
俺も最初そう思った。しかしコンパイルエラーを晒してくれないので
さっぱり原因がわからん。
0070初心者(今までのは全部間違い、すまそ)2006/03/32(土) 20:46:19
>>52
// test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void name(char* s){
cout << s << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが文字列にして全部表示してくれる
cout << &s << "\n";//(&s:文字列の先頭を指すポインタの中身)
cout << s[14] <<"\n";//(s[14]:15番目のポインタ)をcoutが文字にして表示してれる

}

int _tmain(int argc, _TCHAR* argv[])
{
char s[]= "2chnerehayaku sine";
name(s);
return 0;
}



>>52
ゴメン、今までの全部なしにして
>>52の通りで普通に出来たけど
何か駄目なのか?
0071632006/03/32(土) 20:47:59
>>66
なんだかエラーが出たような気がしないでもないから苦肉策としてです。

僕も自然な表記で済むならそうしたいです。
0072632006/03/32(土) 20:51:18
>>68-69
調べて参ります。
0073デフォルトの名無しさん2006/03/32(土) 20:51:26
そりゃ仕様です。
気になるならvector< vector<int> >とかやればいいんでないの。
これでも気になるなら他の手段使えばいいよ。
0074初心者2006/03/32(土) 21:00:51
すまん、また間違えたよ

cout << &s << "\n";//(&s:文字列の先頭を指すポインタの中身)
↓
cout << *s << "\n";//(*s:文字列の先頭を指すポインタの中身)
に変更

上のはポインター自体のアドレスだがや
0075初心者2006/03/32(土) 21:15:55
cout << s[14] <<"\n";//(s[14]:15番目のポインタ)をcoutが文字にして表示してれる
ていうのも違うな

cout << s[14] <<"\n";//(s[14]:15番目の文字)をcoutが文字にして表示してれる
15番目の文字って意味だな

(ポインタともいえるのかもしれないけど、一応 *s[14] って出来ないから文字だな)
0076初心者2006/03/32(土) 21:22:53
まとめると
cout << s << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが文字列にして全部表示してくれる
cout << s + 14 << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが15番目の文字から文字列にして最後まで表示してくれる
cout << *s << "\n";//(*s:文字列の先頭を指すポインタの中身 )
cout << &s << "\n";//(&s:文字列の先頭を指すポインタのアドレス)
cout << s[14] <<"\n";//(s[14]:15番目の文字)をcoutが文字にして表示してれる

俺、全然駄目だな・・・
0077デフォルトの名無しさん2006/03/32(土) 21:37:31
式中のchar, shortは自動的にintに格上げされますが、
floatは必ずしもdoubleにされるわけじゃないですよね?
K&R1版にはdoubleに格上げされるとあるようですが、
古い仕様ですよね?
0078デフォルトの名無しさん2006/03/32(土) 22:01:54
>>77
その通り
0079772006/03/32(土) 22:07:09
どうもです
0080初心者2006/03/32(土) 22:32:20
すまん、s[14] みたいなのは文字とか文字列の事か
0081デフォルトの名無しさん2006/03/32(土) 22:57:45
配列のことや。
0082初心者2006/03/32(土) 23:12:27
char* s1[3]={"東京","大阪","名古屋"};
としたとき

東京の”京”の字だけ出すにはどう配列を書いたら良いの?
0083初心者2006/03/32(土) 23:25:07
ああ、この場合はs[0]
ポインタの配列か
0084デフォルトの名無しさん2006/03/32(土) 23:40:08
>>82
#include <stdio.h>
#include <wchar.h>

wchar_t const* s1[3] = {L"東京",L"大阪",L"名古屋"};
fputwc(s1[0][1], stdout);
0085デフォルトの名無しさん2006/03/32(土) 23:45:22
"京"の文字だけ出すっていう出すの意味がわからんというか
何をしたいのかわからんが、"京"は2バイト文字なので、
s1[0][2]とs1[0][3]のchar型2つ分の内容で"京"1文字を表す。
0086デフォルトの名無しさん2006/03/32(土) 23:48:03
>>85
いい加減なこと言うなや
0087初心者2006/03/32(土) 23:49:34
>>84
ありがとう
やっぱ
他の関数使わないと無理なのな
0088852006/03/32(土) 23:53:58
>>86
え?どっかいい加減だった?
0089デフォルトの名無しさん2006/03/32(土) 23:55:56
文字コードによって全角文字のバイト数は異なる違う
例えばEUCだと3バイト文字がある
0090デフォルトの名無しさん2006/03/32(土) 23:59:54
そういう文字コードは、wchar_tが2バイトの処理系では
扱えないっちゅうことか?
0091デフォルトの名無しさん2006/04/02(日) 00:04:29
wchar_tってそういう文字コードを突っ込む型じゃないだろ!
0092初心者2006/04/02(日) 00:20:06
char* s1[3]={"tokyo","oosaka","nagoya"};
の時

s1[0]+1
s1[0][1]

は同じ事なのかな?
0093デフォルトの名無しさん2006/04/02(日) 00:41:52
>>92
*(s1[0]+1)
と
s1[0][1]
が同じ。
0094デフォルトの名無しさん2006/04/02(日) 00:48:59
>>92
前者はchar *型、
後者はchar型

s1 : char *[3]型
s1[0] : char *型
s1[[0][0] : char型

こうするとわかりやすい。

std::cout << typeid(s1[0] +1).name() << std::endl ;
std::cout << typeid(s1[0][1]).name() << std::endl ;

0095632006/04/02(日) 00:50:35
調べて参りました。
コンテナはコンテナを格納出来ます。
0096初心者2006/04/02(日) 01:11:41
>>93
>>94
つまり
s1[0][1]って
はchar型なのな

だから
&s1[0][1]ってやると
okyoになるのか
結局、普通の配列なのか
0097デフォルトの名無しさん2006/04/02(日) 01:29:15
>>95
うん、できるってばよ
すぐに>>64で示されとるだろうが

結局なにがわからなくて質問しにきたんだろう・・・
0098デフォルトの名無しさん2006/04/02(日) 01:46:29
>>91
wchar_tのエンコーディングは何も規定されてないよ、規格上は。

Unicodeを使うのが最近では一般的だけど
そうでない実装も普通にある/あった。
0099デフォルトの名無しさん2006/04/02(日) 02:16:51
cout << でコンソールに出力したら超遅くない?
Cでprintfなら一瞬なのに、C++のやり方だと一文字ずつズラーっと並ぶ感じ。
0100デフォルトの名無しさん2006/04/02(日) 02:28:22
>>99
それはそれでカッコいいじゃん
0101デフォルトの名無しさん2006/04/02(日) 02:39:46
ちょっと流れ切るようで申し訳ないのですが
PhotoShopで作成したアルファを適応したPNGファイルが読み込みたいので
ttp://www.topposystem.co.jp/GDIp/GDIp/gdi_flat_api.htm
にあるGDI+FlatsAPIsの関数を使用しファイルの読み込みに
336 GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, GpBitmap **bitmap);
でGpBitmapを作成し
344 GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap, HBITMAP* hbmReturn, ARGB background); 
でhBitmapに変換しそれをUpdateLayeredWindowで表示させようと思ってるのですが
GpStatus GdipCreateBitmapFromFile("ファイル", GpBitmap **bitmap);の形で書くと
初期化子の数が多いと言われ、上のリストと引数が違い詳細がわからず困っています。
環境はVC++.NET2003で作成しています。

この方法でアルファが抜けた状態でウィンドウを表示する事は可能なのでしょうか?
普通のBitmapやアルファの付きのBMP等の表示は成功しています。
どなたか教えて頂けないでしょうか?よろしくお願いします。
0102デフォルトの名無しさん2006/04/02(日) 02:41:41
まじprintfの方が10倍は速い。
こんなんじゃJavaにすら負けそう
0103初心者2006/04/02(日) 02:55:44
char a[3][10]
は最大の大きさ[10]をあらかじめ決めないといけないけど

char* a[]
は自動でぴったり確保される
よね?

char a[3][10]の方は使わない部分は空白で埋まるわけ?
0104デフォルトの名無しさん2006/04/02(日) 02:59:38
>>103
配列が静的なものか、定義するときに初期化子をつけていれば、初期値の無い部分は 0 で埋まる。
あと、文字列リテラルには書き込みできないから気をつけろ。
0105デフォルトの名無しさん2006/04/02(日) 03:02:50
C言語でスクリーンセーバーを作れますか?
コンパイラはBCCです。
0106デフォルトの名無しさん2006/04/02(日) 03:03:29
>>105 作れますよ。
0107デフォルトの名無しさん2006/04/02(日) 03:18:14
>>106
ありがとうございます。
どこかでBCCでは作れないと聞いたので安心しました。
0108デフォルトの名無しさん2006/04/02(日) 03:29:01
>>102
最適化をかければ10倍ってことはないような気がするけど。

まあ確かに C++ のストリームではフォーマッティングがやりにくいとは思う
printf流のフォーマッティングも型安全でないところとかが気に入らないけど
使いやすさでいえば確かに使いやすいしな
0109デフォルトの名無しさん2006/04/02(日) 03:53:53
>>71
それってエラーじゃなくて、
デバッグ文字列が255文字を・・・とかいう警告じゃない?
#pragma で消せるはず。
0110デフォルトの名無しさん2006/04/02(日) 03:58:18
>>107
>どこかでBCCでは作れないと聞いたので安心しました。

お前が心配だ。
0111デフォルトの名無しさん2006/04/02(日) 04:46:22
汎用関数の型制限なんてできますか?
intとfloatとdoubleのみ可能みたいな。
0112デフォルトの名無しさん2006/04/02(日) 04:49:27
>>111
汎用関数って何だ?Templeteか?
せいぜいその3種類のみに特化させて、他は何も無しぐらいしかないんじゃね?

間違ってるかも知れんからあくまで参考程度にとどめてくれ
0113デフォルトの名無しさん2006/04/02(日) 04:54:01
テンプレート書いて、intとfloatとdoubleだけ特殊化して
その他の場合はコンパイル時にエラー起こすようにしたらいい

エラー起こす手段は適当にstatic assertでぐぐってくれ
0114デフォルトの名無しさん2006/04/02(日) 07:21:10
>>112-113
サンキュウエニウェイ
0115522006/04/02(日) 07:54:23
http://pc8.2ch.net/test/read.cgi/tech/1141363718/44
が元のソースです。BCCの問題かもしれません
0116デフォルトの名無しさん2006/04/02(日) 08:01:41
>>115
VC++Expressのcl.exeだと/EHscオプションつければ警告も無くコンパイル成功
0117デフォルトの名無しさん2006/04/02(日) 10:21:02
>>111
こんな方法もある。

//hoge.h
template <typename T>
int hoge(T t) ;


//hoge.cpp
template <typename T>
int hoge(T t)
{
//適当に実装
}

template int hoge(int) ;
template int hoge(float) ;
template int hoge(double) ;


//main.cpp
int main()
{
0118デフォルトの名無しさん2006/04/02(日) 10:23:05
//途中で書き込んでしまったorz
//main.cpp
#include "binary.h"

int main()
{
hoge(0) ; //hoge<int>
hoge(0.1) ;//double
hoge("hoge") ;//エラー
}
01191172006/04/02(日) 10:25:18
なんかへんなヘッダが混じったけど無視してOrz
C++ Template Metaprogramming読んで適当に試している最中だったんだ。
0120デフォルトの名無しさん2006/04/02(日) 13:35:03
>>110
いや、お前が心配だ。
BCCはscrnsave.lidが無いから無理。
0121デフォルトの名無しさん2006/04/02(日) 13:42:18
>>120
scrnsave.libはスクリーンセーバを書くときのお約束をまとめただけのもので必須ではない。
もし使いたいならmingwプロジェクトのscrnsave.cを使えばいいし。
0122デフォルトの名無しさん2006/04/02(日) 13:47:06
>>120
それ猫(ryに書いてあった!

*Borland C++ Compilerにはscrnsave.lidが付属していないため、
本章(スクリーンセーバーを作る章)のサンプルコードをコンパイルすることはできません。
0123デフォルトの名無しさん2006/04/02(日) 16:02:58
IEnumPStoreItems : IUnknown
{
HRESULT Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched );
HRESULT Skip (unsigned long celt );
HRESULT Reset ( );
HRESULT Clone (struct IEnumPStoreItems * * ppenum );

virtual HRESULT __stdcall raw_Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched ) = 0;
virtual HRESULT __stdcall raw_Skip (unsigned long celt ) = 0;
virtual HRESULT __stdcall raw_Reset ( ) = 0;
virtual HRESULT __stdcall raw_Clone (struct IEnumPStoreItems * * ppenum ) = 0;
};

�@
IEnumPStoreItems : IUnknown
はクラスの定義でよろしか

�A
HRESULTというのはエラー定義ですよね?
HRESULT Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched );
とは変数Nextにunsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetchedを
引数として一緒に返す関数ってことですか。また、

�B
virtual HRESULT
はどのように理解したらよろしか
オナガイシマス
0124デフォルトの名無しさん2006/04/02(日) 17:33:04
1.
IUnknownクラスを継承したIEnumPStoreItemsクラスの宣言

2.
HRESULTというのはtypedefされた型名
(unsigned long celt, LPWSTR * rgelt, unsigned long * pceltFetched) を引数として渡して
HRESULTを返すNextという名前の関数

引数として一緒に返すってなんやねん

3.
戻り値の型がHRESULT型の仮想関数の宣言
この場合は =0; があるので純粋仮想関数
0125デフォルトの名無しさん2006/04/02(日) 18:18:42
>>124
>IUnknownクラスを継承したIEnumPStoreItemsクラスの宣言

先頭に class なり struct なりクラスキーが付いてないんだから「クラス宣言」といってしまうのはちょっと
JIS 的には、クラスキーを除いた「クラス先頭部」ってところだが……

# 定義=宣言ではあっても、メンバ定義が付いているやつを「クラス宣言」と呼びたくはないなあ


0126デフォルトの名無しさん2006/04/02(日) 19:30:36
>>124
>>125
サンクス
123です
2
は戻り値を返すで良いですよね?

0127デフォルトの名無しさん2006/04/02(日) 21:05:10
ちょっと質問よろしいでしょうか。

クラスAにクラスB・C・Dをそれぞれ保持させています。
そのクラスB・C・Dでそれぞれクラスxの機能を使用したいのですが
それぞれにクラスxを保持させる以外にいい方法はないでしょうか。

アドバイスをお願いします。
01281272006/04/02(日) 21:06:30
sage禁止らしいですね。すいませんでした
0129デフォルトの名無しさん2006/04/02(日) 21:45:31
>>127
それで問題ないならそれがいいだろう。何が不満なんだ?
0130デフォルトの名無しさん2006/04/02(日) 21:53:32
>>127
AがXを保持し、B/C/Dはそこへの参照を保持するようにしたらどう?
01311272006/04/02(日) 22:01:33
>>129
クラスBCD以外にも今後xを使うクラスが増える予定であるのと
クラスAも一つじゃなくて複数なのであまり効率的でないのかなとおもったので・・・・

>>130
参照を保持する・・・具体的にどう記述してよいものか判らないので簡単な例を挙げていただけないでしょうか。
0132デフォルトの名無しさん2006/04/02(日) 22:30:55
すいません。
学校でプログラムを習っている学生なのですが、
上手くならなくて悩んでいます。

授業では、プログラムソースを1回づつ写すことを繰り返していて、
それを動作させるのは出来ていたのですが、
その後、急に「こういう物を作れ」「ソートを作れ」とだけ問題が出され、
全く分かりませんでした。

普通の人は、その1回で自分の物に出来てしまうのでしょうか?
写す練習を続けていても、どうせ写せても分かるようにならないんだ!
という気分になり、身が入りません・・・
0133デフォルトの名無しさん2006/04/02(日) 22:36:35
>>132
プログラムソースを本当に「写す」ことだけを繰り返してたんなら、
あんたプログラム向いてないよ。辞めときな。

普通は写してる途中で考える。
「ここはどういう意味か?」
「ここをちょっと変えたらどうなるのか?」
学校でプログラムを写させる時には、たぶんそういうのを期待している。

そういう考えができないなら本当にプログラムは辞めたほうがいい。
01341322006/04/02(日) 22:38:36
>>133
なるほど・・・納得です。
確かに、ifとかを記号的に扱えれば上手くなるのかな・・・と、思うのですが、
いざ白紙の画面を見ると、何もできないんです・・・。
難しいですね。レスありがとうございます。
0135デフォルトの名無しさん2006/04/02(日) 22:43:16
http://www.amazon.co.jp/exec/obidos/ASIN/4774112399/249-1362202-1853150
そういうのってこれ読んだらいいんじゃないの?
0136デフォルトの名無しさん2006/04/02(日) 22:46:08
http://www.amazon.co.jp/exec/obidos/ASIN/4874084141/ref=pd_sim_dp_1/249-1362202-1853150
こんなのとかどうなんだろ?
01371322006/04/02(日) 22:52:22
>>135>>136
お勧めありがとうございます。書店で見てみます。

もう少し頑張ってみます。
ありがとうございました!
0138デフォルトの名無しさん2006/04/02(日) 23:01:17
VBからC++への移行しようとしているのですがまったくわかりません。
MONAOSのプログラミングに貢献したいと思っているので教えていただきたいです。
0139デフォルトの名無しさん2006/04/02(日) 23:02:59
配列の定義の際に、要素を全部0にするやり方として
int array[40] = {};
は邪道ですか?普通?
0140デフォルトの名無しさん2006/04/02(日) 23:04:01
>>138
何を聞きたい?
0141デフォルトの名無しさん2006/04/02(日) 23:11:59
>>139
それ、 C だとコンパイルできないから、 = {0} にするのが一般。
01421392006/04/02(日) 23:26:28
>>141
なるほろ。どうも。
01431322006/04/02(日) 23:48:17
配列って、何も入れないと0になるんですね・・・
参考になります・・・
0144デフォルトの名無しさん2006/04/02(日) 23:49:19
>>143
ならない
01451322006/04/02(日) 23:51:28
>>144
えっ・・・では>>139さんや>>141さんの書き込みは・・・
0146デフォルトの名無しさん2006/04/03(月) 00:02:16
>>145
初期化子の不足分には 0 が埋められる。初期化しないときは不定。
静的記憶域の変数なら初期化しないときも 0 になる。
0147デフォルトの名無しさん2006/04/03(月) 00:41:20
>>141の話が出ると、勘違いする初心者が多くて困る
01481322006/04/03(月) 01:52:46
なるほど・・・どうもです
0149デフォルトの名無しさん 2006/04/03(月) 02:32:44
2次元だろうが3次元だろうが配列の初期化は{0}でOK
0150デフォルトの名無しさん2006/04/03(月) 03:20:52
C言語に3次元配列ってあるのか?
0151デフォルトの名無しさん2006/04/03(月) 03:22:00
hairetsu[z][y][x];
0152デフォルトの名無しさん2006/04/03(月) 03:32:43
int a[10][10] = {{0}};
int b[10][10][10] = {{{0}}};
0153デフォルトの名無しさん2006/04/03(月) 09:16:39
>>152
ぶっちゃけどちらも{0}でいいんじゃ・・・
015449(ncursesで日本語表示)2006/04/03(月) 10:40:11
Windows Service for Unix3.5 使うと日本語表示できました
0155デフォルトの名無しさん2006/04/03(月) 14:00:53
初心者から中級者を目指す為に勉強していますが、
わからないことがありますので教えてください。

strcpy(stackinfo, phost->h_name) ; の

  ->  とゆう表記はなんでしょうか?
 
代入?変数?よくわかりません。よくプロの人が
使う技なんでしょうか?
ちなみに初心者の書籍には一切書かれて無かったので、
中級以上の方が使うものだと思われます。
わかる方、よろしくお願いします。
0156デフォルトの名無しさん2006/04/03(月) 14:03:22
>>155
アロー演算子でググレ
0157デフォルトの名無しさん2006/04/03(月) 14:03:38
今時の初級者用の参考書はポインタも解説してらっしゃらないんですか?
0158デフォルトの名無しさん2006/04/03(月) 14:04:15
>>156
ありがとうございます。早速しらべてみます。
0159デフォルトの名無しさん2006/04/03(月) 14:05:11
>>155
なんという書籍なのか非常に気になる。

ポインタを解説しないCの書籍なんてあるのだろうか。
0160デフォルトの名無しさん2006/04/03(月) 14:26:11
どうせうすっぺらな知識しかない作者が書いたいまどきの書籍なのでしょう。
0161質問2006/04/03(月) 15:23:44
質問なんですが、
C言語の質問ではないのですが適切なスレがどこなのかわからないのでここに書いてみました。
Q1.Visual Studio 2003でC++でダイアログプログラムを記述しているのですが
メインダイアログを表示するのにリソースビューからたどって何度かクリックしないといけないのですが、簡単に表示させることはできますか?
Q2.ダイアログでプログラム作成時に常にグリッド表示にしたいのですが、「グリッド」に設定して保存しても、サイドプロジェクトを開くと「ガイドの設定」が「ルーラーとガイド」に戻って
しまいます。ガイドの設定をグリッドに固定することは可能でしょうか?
よろしくお願いします。
0162デフォルトの名無しさん2006/04/03(月) 15:51:44
A1.できません。プロジェクトを閉じるとだめだけど、開きっぱなしでいいなら代わりにダイアログエディタのビューを閉じないでタブ切り替えで我慢するとか。
A2.しりません。やってみたけどできないね。
0163質問の母2006/04/03(月) 16:13:36
>162 さん。よくわかりました。つまりできなそうですね。他の方でできるという人がいたら情報お願いします。
0164デフォルトの名無しさん2006/04/03(月) 16:22:10
C++からプログラミングを始めたいと思って今、これならわかるC++ っていう本を読んで
CUI環境でのC++プログラム(と言えない程の物)をちょろちょろ作ってるんですけど、
皆さんは初めてプログラミングを始めようと思ったときどんな事から始めましたか?どんな本を読みましたか?どんな学校でどんな事から学びましたか?
教えていただけるとうれしいす。


初心者歓迎ってこういう事じゃなかったりスレ違いだったりした場合誘導お願いします∧||∧
0165ヒッキー☆2006/04/03(月) 16:56:17
つhttp://hp25.0zero.jp/473/BzLIVEGYM/
↑このHPの日記にて
「暇だよなネラー爆笑
 見ててウケるしワラ〜
 自分を相手への中傷でしか表現できなぃ(笑)
 頑張ろうね
 なんか能力低いっつうか人として低いなって思う(笑)」

↑ようするに
ニートだけならまだしもPCやってる全ての人間を馬鹿にしてるんですよ

あなたは許せますか??
0166デフォルトの名無しさん2006/04/03(月) 17:02:33
実話じゃん
0167デフォルトの名無しさん2006/04/03(月) 17:17:11
>>165
>ニートだけならまだしもPCやってる全ての人間を馬鹿にしてるんですよ
その内容からそういう判断をするお前が人を馬鹿にしているんだよ。
若しくは、お前自身が馬鹿。
0168デフォルトの名無しさん2006/04/03(月) 18:43:46
>>164
マ板向きの内容だと思うのでここらへんでどうぞ

スレッドを立てるまでもない質問雑談スレ23
http://pc8.2ch.net/test/read.cgi/prog/1139729337/l50

【ルールは】超初心者が質問するスレ【守れ】
http://pc8.2ch.net/test/read.cgi/prog/1093770642/l50
01691642006/04/03(月) 20:51:52
>>168
誘導サンクスです。<(_ _)>
お邪魔しました〜
0170デフォルトの名無しさん2006/04/04(火) 07:41:51
#define x(arg1) なんか展開する
#define y(arg2) x(arg2)を使って展開する

こんな感じでマクロの中で他のマクロを
多重に使えるんでしょうか?
そのとき評価順序はどうなるんでしょう?
0171デフォルトの名無しさん2006/04/04(火) 08:29:17
#define x(arg1) X##arg1##X
#define y(arg2) x(arg2)
#define z(arg3) Z z(arg3) Z
x(xxx)
y(yyy)
z(zzz)

    ↓展開結果 by gcc -E

XxxxX
XyyyX
Z z(zzz) Z
0172デフォルトの名無しさん2006/04/04(火) 08:31:50
これはまぁ分かるんだけど、次の例はどういうこと?

#define z(arg3) Z##z(arg3)##Z
z(zzz)

    ↓ 展開結果 by gcc -E

test.c:2:1: pasting ")" and "Z" does not give a valid preprocessing token
Zz(zzz)Z
0173デフォルトの名無しさん2006/04/04(火) 08:44:43
>>172 エラーメッセージ嫁
0174デフォルトの名無しさん2006/04/04(火) 08:47:00
>>173 いや、だからなぜ二個目のZが単なるリテラル
として連接されずに、展開対象になっているのかと。
gcc の 2.9.x から 3.x で挙動が変わった?
0175デフォルトの名無しさん2006/04/04(火) 08:49:18
うーん、こういうこともあるみたいだし、あんまり変な事するなってことか?
http://blog.tcp-ip.or.jp/ar/syuichi/index.php?mode=show&date=20050112
0176デフォルトの名無しさん2006/04/04(火) 08:52:06
ごまん、激しくかんちがいしてた。
鬱だしのう
0177デフォルトの名無しさん2006/04/04(火) 09:08:40
>>174 どこにリテラルがある?
0178デフォルトの名無しさん2006/04/04(火) 10:58:14
これはひどい
0179デフォルトの名無しさん2006/04/04(火) 11:29:13
インターネッコ
0180デフォルトの名無しさん2006/04/04(火) 12:01:29
複雑なファイルはCでは
どう読みこめば?
あかさたなはまやら
というファイルから
かさた、まや
だけ読み込んでcharに
置き換えるにはどうすればいいのでしょう?
0181デフォルトの名無しさん2006/04/04(火) 12:38:23
>>170
>そのとき評価順序はどうなるんでしょう?
#define x(a) {a}
#define y(a) <x(a)>
とすると、y(foo)の展開は次のように進む。引数の展開の細かいところは省略した。
矢印は「着目しているトークン」を指す。
→y(foo)
/* マクロyの呼び出しを認識。引数の対応は a -> foo */
/* 引数fooを展開。結果はfoo */
/* yの呼び出しを定義本体で置き換える */
→<x(foo)>
/* <はマクロではないのでそのまま出力 */
<→x(foo)>
/* マクロxの呼び出しを認識。引数の対応は a -> foo */
/* 引数fooを展開。結果はfoo */
/* xの呼び出しを定義本体で置き換える */
<→{foo}>
/* {はマクロではないのでそのまま出力 */
<{→foo}>
/* 以下同様。これ以降マクロの呼び出しはなく、結果は<{foo}>。 */
0182デフォルトの名無しさん2006/04/04(火) 12:44:00
>>180
どういう条件で

 かさた、まや

だけが抜き出されるのか?
をコンピュータに説明すればいい。
0183デフォルトの名無しさん2006/04/04(火) 12:51:18
そういやマルチバイト文字1文字を表すときどうやんの?
char ch ='あ';だとコンパイルエラーだし
0184デフォルトの名無しさん2006/04/04(火) 12:59:01
マルチバイトって時点で一文字とかそういうの超越してる。
0185デフォルトの名無しさん2006/04/04(火) 13:42:56
そういえばおれもロケールの扱い方はイマイチだ・・・orz

5冊C++の本あるのにstd::localeのこととか、どれにもほとんど載ってねー
買う本間違ったかな・・・、それとも足りないかな・・・
まあ、ぐぐればそれなりに出てくるみたいだけど

以上チラシの裏
0186デフォルトの名無しさん2006/04/04(火) 13:52:00
>>182
それが難しくて出来ないんです
単にfscanfを利用してもできませんし…
0187デフォルトの名無しさん2006/04/04(火) 14:14:16
>>186
ワイド文字を含むテキストファイルから、例えば任意のn番目にある文字を知りたい
みたいな感じ?
0188デフォルトの名無しさん2006/04/04(火) 15:04:47
勉強し始めのド低脳な質問かもしれないけど
お願いします。

金額を入力して、割引した額を表示させるプログラム
を作ったのですが
printf("一割引の場合\n%d円\n",(int)(a*0.9));
この行の(int)(a*0.9))の(int)がなぜ必要なのでしょう?
実際無くしてやってみたら全部計算結果が0になってしまった
のですが。
0189デフォルトの名無しさん2006/04/04(火) 15:07:39
int型の整数(この場合a)に小数点ありの実数(0.9)を掛けると
int型は自動的にdouble型やfloat型などの浮動小数点型に”格上げ”されてしまうため、
(int)でint型にキャストして表示してる
0190デフォルトの名無しさん2006/04/04(火) 15:12:15
>>189
ということは、5とか6とか掛けるなら
このintはいらない、ってことですね。
アリガトウございました。
0191デフォルトの名無しさん2006/04/04(火) 15:42:49
>>183
       、--‐冖'⌒ ̄ ̄`ー-、
     /⌒`         三ミヽー-ヘ,_
   __,{ ;;,,             ミミ   i ´Z,
   ゝ   ''〃//,,,      ,,..`ミミ、_ノリ}j; f彡
  _)        〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
  >';;,,       ノ丿川j !川|;  :.`7ラ公 '>了  なにジョジョ? マルチバイト文字一文字が表せない?
 _く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
  ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;)  ジョジョ それは「一文字」と考えるからだよ
  く .:.:.:.:.:!ハ.Yイ  ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
   ):.:.:.:.:|.Y }: :!    `二´/' ; |丶ニ  ノノ    逆に考えるんだ
    ) :.: ト、リ: :!ヾ:、   丶 ; | ゙  イ:} 
   { .:.: l {: : }  `    ,.__(__,}   /ノ   「2バイトだから文字列だ」と
    ヽ !  `'゙!       ,.,,.`三'゙、,_  /´   
    ,/´{  ミ l    /゙,:-…-〜、 ) |       考えるんだ
  ,r{   \ ミ  \   `' '≡≡' " ノ  
__ノ  ヽ   \  ヽ\    彡  ,イ_
      \   \ ヽ 丶.     ノ!|ヽ`ヽ、
         \   \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
            \  `'ー-、  // /:.:.}       `'ー、_
0192デフォルトの名無しさん2006/04/04(火) 15:51:09
>>191
UTF-32だったら4バイトだよ
0193デフォルトの名無しさん2006/04/04(火) 19:01:40
L なしで UTF-32 はねーよ。UTF-8 なら分かるが。

SJIS にしろ EUC にしろ UTF-8 にしろ、
どちらにしろ文字列だな。
0194デフォルトの名無しさん2006/04/04(火) 21:07:08
>>183
Shift-JIS環境などでは通る。

>>186
> それが難しくて出来ないんです

まず、条件をまとめろ。
話はそれからだ。

そもそも、人に説明できない事を、
コンピュータに命令出来ると思ってるのか?

抜き出したい各文字がどういう条件で抜き出されるのか、
もう一度よく整理するこったな。
0195デフォルトの名無しさん2006/04/04(火) 21:34:19
wchar.hっていつできたの?
最近のC言語の本でも載ってないのけっこうある。
標準だよね?
0196デフォルトの名無しさん2006/04/04(火) 21:37:28
C95からだからもう10年以上前に。

ttp://ja.wikipedia.org/wiki/C99
0197デフォルトの名無しさん2006/04/04(火) 21:52:39
それってwchar_t型の話では?
stddef.hの・・・
0198デフォルトの名無しさん2006/04/04(火) 21:58:08
wchar_tはC89からあるだろ。
0199デフォルトの名無しさん2006/04/04(火) 22:17:10
http://www.kumei.ne.jp/c_lang/intro/no_35.htm
>int *ptr();とするとint型へのポインタを返すptr関数という意味になります。
これってどういう意味なんですか?
サンプルソースとか誰か書いてくれませんかね?
0200デフォルトの名無しさん2006/04/04(火) 22:22:39
>>199
int* ptr();
こう書いたらわかるか。
0201デフォルトの名無しさん2006/04/04(火) 22:23:10
>>199
int *ptr(); /* 宣言 */

int *ptr() { return NULL; } /* 定義 */
0202デフォルトの名無しさん2006/04/04(火) 22:27:12
int * ptr()
{
static int forex = 10;
return & forex;//int へのポインタ
}
0203デフォルトの名無しさん2006/04/04(火) 22:28:28
>>199
ついでに言えば、
int * ptr() = NULL;
はエラー。
int (* ptr) () = NULL;
は合法。
0204デフォルトの名無しさん2006/04/04(火) 22:36:15
分かりました。
どうもありがてれう。
0205デフォルトの名無しさん2006/04/04(火) 23:12:39
 for (i=0,encstring+=6;*encstring;encstring+=2,i++) {
  val = MyStrSearch( nRnd, *encstring, *(encstring+1) );
  decstring[i] = (unsigned char)val;
 }
たぶん2重に条件つけてるんだろうけど
for($i=0;なんたら〜;$i++){

}
と展開してくれないかな?
0206デフォルトの名無しさん2006/04/04(火) 23:27:00
for(A;B;C) {
〜
}

≒

A
while(B){
〜
C
}
0207デフォルトの名無しさん2006/04/04(火) 23:29:47
>>205
それ、山田オルタの宇宙語デコーダだろ?
0208デフォルトの名無しさん2006/04/05(水) 04:03:51
CInternetSessionでとってきたソースがEUCで書かれているのですが、
これをCStringに読めるようにする方法、ありますか?
VC++.NET MFC SDIです。宜しくお願いします。
0209デフォルトの名無しさん2006/04/05(水) 04:44:58
ありますよ
0210デフォルトの名無しさん2006/04/05(水) 07:37:00
ConvertINetMultiByteToUnicode
0211デフォルトの名無しさん2006/04/05(水) 08:50:25
質問です
 
while(1){
printf("hello\n");
}

というプログラムを実行すると
hello
hello
.....と続くじゃないですか、
一回一回のループでコマンドプロンプトに出力された結果を消去したいんですが・・
つまり hello が一回だけ出力されるようにしたいんですが・・

while使うなって思うかもしれませんがどうしてもwhileはまわしたいんです。
誰か、教えてくださいお願いします
0212デフォルトの名無しさん2006/04/05(水) 08:52:55
#ifdef WIN32_
system("cls");
#else
system("clear");
#endif
0213デフォルトの名無しさん2006/04/05(水) 08:59:00
>>212さん

助かりました。ありがとうございます
0214デフォルトの名無しさん2006/04/05(水) 09:24:07
>>211
1行だけしか出力しないなら\rって手もある
printf("hello\r")にすればカーソル位置がhに戻るから上書きされる
進捗度表示するのとかに使えるな
0215デフォルトの名無しさん2006/04/05(水) 11:31:48
ま、長くなって改行すると破綻するけどね。
0216デフォルトの名無しさん2006/04/05(水) 11:34:04
>183 デフォルトの名無しさん 2006/04/04(火) 12:51:18
> そういやマルチバイト文字1文字を表すときどうやんの?
> char ch ='あ';だとコンパイルエラーだし

>194 デフォルトの名無しさん 2006/04/04(火) 21:07:08
> >>183
> Shift-JIS環境などでは通る。
0217デフォルトの名無しさん2006/04/05(水) 11:34:38
文字列の配列(char**)を動的に確保したいんだけど、
どうしても下の箇所でエラーが出る
よくよく考えればサイズの分からないものを確保しようとして失敗してるってわかるんだけど、どうにかならないかな
ファイルから文字列を読み込み、rand()%numで文字列配列内の要素にランダムにアクセスしてそれを出力するプログラムです

ReadFile(char**& urllist, int& num)
{
/*・・・・・・・・・・・・・・・・・・*/
 strlist = new char*[num];
/*・・・・・・・・・・・・・・・・・・*/
}
0218デフォルトの名無しさん2006/04/05(水) 11:36:41
>>211
なんだかいろいろ見つかった。
http://pc8.2ch.net/test/read.cgi/tech/1124256027/583
http://pc8.2ch.net/test/read.cgi/tech/1142302804/988
http://pc8.2ch.net/test/read.cgi/tech/1142302804/983
http://pc8.2ch.net/test/read.cgi/tech/1134128493/382
http://pc8.2ch.net/test/read.cgi/tech/1135077848/437-438
http://pc8.2ch.net/test/read.cgi/tech/1138893959/35
0219デフォルトの名無しさん2006/04/05(水) 11:38:19
>>217
・std::vectorを使う。
・関数I/Fを見直す。
・newを使うという発想の愚かさに気づく。
0220デフォルトの名無しさん2006/04/05(水) 11:44:33
>>219
オーケー
マロクってくる
0221デフォルトの名無しさん2006/04/05(水) 11:51:32
>>220
ー^)ъ GJ!
0222デフォルトの名無しさん2006/04/05(水) 12:02:04
まったくの初心者なのですが、つい最近からC言語を勉強しようと思って
コンパイルをDLしたのですが、MS-DOS窓というのがどこにあるのかまったくわかりません。
C言語の初心者サイトなどを一応見てみたのですが書いていなくて、くだらない質問だとは思いますが教えてください。


0223デフォルトの名無しさん2006/04/05(水) 12:07:03
スタート->ファイル名を指定して実行に「cmd」って入れて出る窓のことをDos窓と言う
コマンドプロンプト。
0224デフォルトの名無しさん2006/04/05(水) 12:12:33
C言語でさっき、char型の変数に0x80をしまい
printf("%d");で中身を確認した所-128と言う値が出力されました
0x70で1120 0x01で10が出力されたのですが、なんでですか?
単純に変数の型と%dの形式があってないからそのような出力がされただけで
実際に変数の中身は代入された値がしまわれているのでしょうか?
0225デフォルトの名無しさん2006/04/05(水) 12:17:08
あなたの環境ではcharは2の補数の符号付整数だから。
0226デフォルトの名無しさん2006/04/05(水) 12:22:33
>>225
御回答ありがとうございます。
じゃあunsigned charにすれば問題ないですね
0227デフォルトの名無しさん2006/04/05(水) 12:32:14
>>223
教えていただいてありがとうございます。
cmdでいいならなんでDOS窓なんて言うんでしょうね・・・。ずっと探してましたよ・・・。


0228デフォルトの名無しさん2006/04/05(水) 12:34:56
>>227
プログラムの前に、コンピュータの一般的な基礎知識から勉強しろよ。
0229デフォルトの名無しさん2006/04/05(水) 12:47:20
>>218 良くそこまで沢山見つけてきたな。
0230デフォルトの名無しさん2006/04/05(水) 13:41:54
>>227
ここはPG初心者歓迎であってPC初心者は受け付けてないのだぜ
とっとと帰るんだぜ
0231デフォルトの名無しさん2006/04/05(水) 13:48:13
command.com と cmd.exe は違うと、
嫁が言ってました。
0232デフォルトの名無しさん2006/04/05(水) 13:59:48
int func(){
  for(int i=0;i<20;i++){
    hoge(i);
  }
  return;
}

iの寿命がfunc関数内ではなく、for内だけにする設定って、VC++6.0ではどうやるんですか?
0233デフォルトの名無しさん2006/04/05(水) 14:02:08
forの中で宣言したものはforの中でしか使えない
0234デフォルトの名無しさん2006/04/05(水) 14:04:31
VC6だとその設定はできなかったような。
0235デフォルトの名無しさん2006/04/05(水) 14:04:45
>>232
#define for if(0); else for
0236デフォルトの名無しさん2006/04/05(水) 14:11:40
>>233 いつの頃から、そうなったなぁ・・・・
0237デフォルトの名無しさん2006/04/05(水) 14:12:09
>>236
VC6がそもそもおかしかった。
0238デフォルトの名無しさん2006/04/05(水) 14:13:32
>>237 VC6が、というか、標準化の中で
そういう風に明確に規定されるようになったんじゃないかな。
0239デフォルトの名無しさん2006/04/05(水) 15:17:44
VC6が出たのは98年のC++標準が出た直後だったと思うが
ドラフト無視して作っただけじゃないかな
0240デフォルトの名無しさん2006/04/05(水) 15:24:12
いや、一応VC++6.0にもifのスコープを標準準拠にするってオプションあるはずだが。
大量にコンパイルエラーになるコードがあるから標準ではOFFってだけじゃなかったか。
0241デフォルトの名無しさん2006/04/05(水) 15:29:29
/Zc:forScope (for ループのスコープの強制準拠)
http://msdn2.microsoft.com/ja-JP/library/84wcsx8x.aspx

Visual C++ 6 および 7.1 では /Zc:forScope オフがデフォルト
Visual C++ 8 では オンがデフォルトのようです。
0242デフォルトの名無しさん2006/04/05(水) 15:45:19
だから VC++ 6.0 にそんなオプションないってば
0243デフォルトの名無しさん2006/04/05(水) 15:56:48
C++標準前に作ってたんだから、VC6にそんなオプションあるわけないじゃん。
だから、VC7でオプション作って、互換性のためにデフォルトでオフにしたんとちゃうん?
0244デフォルトの名無しさん2006/04/05(水) 16:05:43
つーか初期化子はforループの外に書けwそれで解決www
0245デフォルトの名無しさん2006/04/05(水) 16:41:33
>>235 で問題ないだろ。
02462322006/04/05(水) 16:59:25
235でやってみます。
0247デフォルトの名無しさん2006/04/05(水) 17:04:11
いいぞ、やれ、もっとやれ。
0248デフォルトの名無しさん2006/04/05(水) 17:28:08
>243
/Za
ただし、Windows.hでエラーが出るようになるが(w
0249デフォルトの名無しさん2006/04/05(水) 18:48:29
VC++6.0だとMS拡張を全部切らないと無理だよな。
0250デフォルトの名無しさん2006/04/05(水) 22:31:35
USBに接続するタイプのゲームコントローラで操作できるプログラムを作っているんですが、
肝心のコントローラからの入力をどうやって処理したらいいかわかりません。
ウインドウメッセージで WM_DEVICECHANGE というのがあったので検知できるかと思ったのですが
コントローラのボタンを押しても wParam に何も入りません。
USBとかからの情報を扱えるウインドウメッセージは他にありませんか?
0251デフォルトの名無しさん2006/04/05(水) 22:54:57
>>250
USBとかは関係ない。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_input.asp
かDirectInputあたりを使え。
0252デフォルトの名無しさん2006/04/06(木) 02:04:31
仮想関数をオーバライドする際、基底クラスのpublicな仮想関数を
派生クラスではprivate関数としてオーバライドできるって、
何かおかしくないですか?オーバライドする際、アクセス指定は
一致させる必要ないですよね?
そうすると基底クラスのポインタ経由で派生クラスのprivateな関数
呼び出せちまいますよね。継承自体がprivate継承なら基底のポインタに
派生のポインタ代入するとコンパイルエラーになるようですが。。。

(それともこれって標準規格では違うの?俺のコンパイラだけ?)
0253デフォルトの名無しさん2006/04/06(木) 02:05:59
>>252
実際にやってみてから書いてるの?
0254デフォルトの名無しさん2006/04/06(木) 02:10:33
>>252
その動作で規格どおり。そんな規格になってる理由は知らない。
0255デフォルトの名無しさん2006/04/06(木) 02:14:22
>>252
おかしい。
おかしいので仮想関数はpublicにすべきではない
ということになっている
0256デフォルトの名無しさん2006/04/06(木) 02:17:12
>>255 んなこたーない
0257デフォルトの名無しさん2006/04/06(木) 02:26:53
NVIがgotwに載ったのがなんと5年前だ
5年間一冊も本を読んでいない>>256のような
上司あるいは同僚は本当にいるのだ
0258デフォルトの名無しさん2006/04/06(木) 02:39:03
>>257
NVI を否定してるんじゃない。
>>252 が NVI の根拠じゃないだろってこと。
0259デフォルトの名無しさん2006/04/06(木) 03:42:40
>>252
継承自体いい加減な機能なんだからほどほどにしとけw
0260デフォルトの名無しさん2006/04/06(木) 09:16:09
>>252
逆に考えてみろ。
基本クラスでpublic公開されてるものをオーバーライドする訳だから
派生でprivateする事の方がおかしい。
02612522006/04/06(木) 09:24:15
レスどうもです。
そうですか・・・わかりました、ほどほどにしておきます。
0262デフォルトの名無しさん2006/04/06(木) 11:12:04
>>260
おかしいことをしてるのにコンパイルエラーも警告も出ないのはどうなんだってことでしょ
0263デフォルトの名無しさん 2006/04/06(木) 12:16:08
>>262
コンパイラなんてそんなもんだよ
0264デフォルトの名無しさん2006/04/06(木) 12:32:28
文法的には問題ないからな。
0265デフォルトの名無しさん2006/04/06(木) 14:08:49
>>262
そこはlintの範疇だろ
0266デフォルトの名無しさん2006/04/06(木) 15:33:06
あ?
ある人間が今までホームページでタダで公開していたエロ画像があったとしよう。
しかしそのホームページの管理者の考えが変わりエロ画像が有料化してプライベートになることはよくあることだ。
なにもおかしなことではない。
0267デフォルトの名無しさん2006/04/06(木) 16:27:56
>>266
その例えなら
アクセス方法によっては依然ただで見放題ってのが問題なわけで
そこを塞いでないのは何か意図した使い道があるのか?ってことではないかと
0268デフォルトの名無しさん2006/04/06(木) 16:48:24
>>267
ユーザーの良心を信じるってことじゃね?

できるのとやるのはちがうのではなかろーかと。
普通、virtualな関数のアクセスを変更したりしないと思われ。




0269デフォルトの名無しさん2006/04/06(木) 16:58:02
>>268
>普通、virtualな関数のアクセスを変更したりしないと思われ。
そういうプログラマのミスにエラー出すなり警告出すなりするのがコンパイラの仕事なのでは?
なんかこれを利用したテクニックがあったりするのかな?
0270デフォルトの名無しさん2006/04/06(木) 21:06:53
>>269
文法誤りや規格書でダメと規定されてる事にエラーや警告を出すのは
コンパイラの仕事だが、そうでないことにまで警告を出す義務はない
そこはLintの仕事
0271デフォルトの名無しさん2006/04/06(木) 21:25:56
goto 254;
0272デフォルトの名無しさん2006/04/06(木) 21:28:54
>>254
>そんな規格になってる理由は知らない。
ようするにこれが知りたいのさ
0273デフォルトの名無しさん2006/04/06(木) 22:13:22
D&Eのどっかに書いてあるんじゃね?
探すの面倒だけど。
0274デフォルトの名無しさん2006/04/06(木) 22:20:32
昔はvirtualがなかった
派生後のクラスでオーバーライドした関数にアクセスさせたくなかった
ダウンキャスト後のことまではしらね
以上

0275デフォルトの名無しさん2006/04/06(木) 22:20:44
>>272
Stroustrupに聞いてみたらいいんじゃね?幸いまだご存命中なんだし
0276デフォルトの名無しさん2006/04/06(木) 22:51:10
質問
こんな↓感じでクラスの中に構造体を入れてみたんだが
問題ないですよね?
また、このD3DSPRITEVERTEX構造体は
「このクラスの関数内でしか、定義できない構造体である」
と言う認識で良いのでしょうか?

class HOGE{
//略
public:
struct D3DSPRITEVERTEX {
float x, y, z;
float rhw;
DWORD color;
float tu0, tv0;

enum { FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 } ;
   };

};
0277デフォルトの名無しさん2006/04/06(木) 23:17:02
>>276
>「このクラスの関数内でしか、定義できない構造体である」
の意味がわからんが、publicだからHOGE外でも
HOGE::D3DSPRITEVERTEX aaa;
と使うことが出来る。
0278デフォルトの名無しさん2006/04/06(木) 23:22:03
>>277
なるほど。
じゃあ、privateなら、完全に隠蔽できること?
0279デフォルトの名無しさん2006/04/06(木) 23:24:42
いえすきりすと
0280デフォルトの名無しさん2006/04/06(木) 23:26:20
>>279
おお。ありが�d
0281522006/04/06(木) 23:59:59
BCCに詳しいかた>>115をどうしたらコンパイルできますか
0282デフォルトの名無しさん2006/04/07(金) 00:34:37
>>281
ソース修正したらコンパイルできたよー。
これって+の中に数字が入るの?
何のプログラム?
0283デフォルトの名無しさん2006/04/07(金) 00:44:37
すっごく基本的なんですが…

char *a = new char(0xff);
char *a = new char [100];

これをドッキングさせたいんですが、どうやればいいですか?

引数付きコンストラクタしかないクラスを
大きさが変わる配列にしたいのにどうやってもエラーが… orz...
0284デフォルトの名無しさん2006/04/07(金) 00:48:53
>>283
無理。std::vectorやplacement newやstd::uninitialized_fillを使うべし。
0285デフォルトの名無しさん2006/04/07(金) 00:51:00
>>283
> 引数付きコンストラクタしかないクラスを大きさが変わる配列に

std::vector<boost::shared_ptr<Hoge> >
boost::ptr_vector<Hoge>
など
0286デフォルトの名無しさん2006/04/07(金) 01:16:38
つまり、配列のポインタを作って一つづつnewするって事ですか
aa[i].bb(); って感じで書いちゃってるから置換せずやりたかったんですが…

ピリオドをオーバーライドした方が簡単?
0287デフォルトの名無しさん2006/04/07(金) 01:19:03
>ピリオドをオーバーライド
>ピリオドをオーバーライド
>ピリオドをオーバーライド
>ピリオドをオーバーライド
>ピリオドをオーバーライド
0288デフォルトの名無しさん2006/04/07(金) 01:22:43
自己レス…

ごめんなさい、忘れてください…orz...
コンパイルせずに一気に書くなんてアフォな真似はやめよう…
0289デフォルトの名無しさん2006/04/07(金) 20:22:50
managed C++なんですけれども、クラス配列の作り方がわかりません。

__gc class Data{
String* name;
};
main(){
Data* dat __gc[] = new Data* __gc[10]
dat[0]->name = "test";
}
だと「オブジェクト参照がインスタンスに設定されてない」と出ます。
どうすればできるのでしょうか?
0290デフォルトの名無しさん2006/04/07(金) 20:23:44
どうしても Managed C++ じゃないとだめ?
C++/CLI じゃだめ?
0291デフォルトの名無しさん2006/04/07(金) 20:27:09
>>290
当方、VC++ .NET 2003を使っておりますので・・・
managed では無理でしょうか?
0292デフォルトの名無しさん2006/04/07(金) 21:34:18
>>289
datはDataへのポインタの配列だから
各要素もnewでオブジェクトを作ってやらないといけないと思う。
たぶんこんな感じ。
Data* dat __gc[] = new Data* __gc[10]
dat[0] = new Data;
dat[0]->name = "test";
0293デフォルトの名無しさん2006/04/07(金) 23:51:09
C言語で長さ制限無しで一行入力するイディオムってありますか?
0294デフォルトの名無しさん2006/04/07(金) 23:54:07
C言語で、長さの制限無しに
標準入力から一行入力するイディオムはありますか?
0295デフォルトの名無しさん2006/04/07(金) 23:55:59
先生!イディオムってなんですか!
0296デフォルトの名無しさん2006/04/08(土) 00:28:15
慣用句
0297デフォルトの名無しさん2006/04/08(土) 02:32:59
scanf("%s", str);
制限はない。オーバーしても知ったこっちゃないが。
0298デフォルトの名無しさん2006/04/08(土) 03:02:23
スペースランナウエィ
02992892006/04/08(土) 08:31:12
>>292
できました!
ありがとうございました。
0300デフォルトの名無しさん2006/04/08(土) 12:55:06
boost の質問はここでよろしいでしょうか?
環境は XP、2005 です。

shared_ptr に、NULL のようなものを持たせるには、どのようにするのが一般的でしょうか。
以下のようなものを作りたいです。

shared_ptr<CHoge> F()
{
 if (〜)
  return NULL;

 shared_ptr<CHoge> p(new CHoge);
 return p;
}


return NULL;

の部分を、

return shared_ptr<CHoge>( reinterpret_cast<CHoge *>NULL );

とすれば正常には動作したのですが、もっと素直な書きかたがありそうです。
よろしくお願いします。
0301デフォルトの名無しさん2006/04/08(土) 13:01:21
>>300
boost/shared_ptr.hppより
shared_ptr::shared_ptr(): px(0), pn() {}
0302デフォルトの名無しさん2006/04/08(土) 13:27:11
すみません、インラインアセンブラを書く場合
コンパイラによって描き方が違うらしいのですが
ボーランドのBCC5.5の場合どのようにすればいいのですか?

あと、コンパイラごとにインラインアセンブラを描きたいのですが
なにを
#if defined
すればいいのでしょうか?
0303デフォルトの名無しさん2006/04/08(土) 13:38:10
>>302
asmで括れ。
BCC -> __BORLANDC__
VC  ->_MSC_VER
GCC ->__GNUC__
0304デフォルトの名無しさん2006/04/08(土) 13:40:49
インラインアセンブラってことは組み込み系ですかね?
だとしたら

#if defined(_SH)
#pragma inline_asm(関数名)
#endif

とかあるでよ。
03053002006/04/08(土) 14:54:16
>>301
ありがとうございます、解決です。ってそりゃそうだわなorz
0306デフォルトの名無しさん2006/04/08(土) 15:06:22
>>297
オーバーしないように
数万バイト確保したchar配列に読む
…くらいは思い付きましたが

それって無駄な領域食い過ぎの気がして。
多分mallocやrealloc使うんだろうなぁ
…くらいは判るんですが
どうにも良いやり方が分からなくて相談しました。

うーん、とりあえず適当にやってみるか…
0307デフォルトの名無しさん2006/04/08(土) 15:17:44
>306
数万バイト確保しても
数万バイトより大きい入力をつっこまれたら溢れる

まあ素直に

#include <stdio.h>
char buf[BUFSIZ]; /* BUFSIZで足りないようなら適宜変えるか設計を見直す */
fgets(buf, sizeof(buf), stdin);

で
0308デフォルトの名無しさん2006/04/08(土) 15:18:16
>>294
mallocで適当な大きさのバッファを確保して、
足りなくなるたびにk倍(普通は二倍)の大きさにreallocする、という手がある。
あるいは、固定長の文字列を要素とするリンクリストを作りながら読みこみ、
読み終わったところで全体を別の場所にコピーする、という方法もある。
0309デフォルトの名無しさん2006/04/08(土) 16:02:41
C言語とC++で、文字定数(例えば'a')のサイズをsizeofではかると、
C言語ではint型サイズに、C++ではchar型サイズになるようですが、
サイズ自体が変わったのでしょうか?
それともC言語の場合は、sizeofが適用される前に、int型へ格上げ
されてるというような(あるかないかわかりませんが)、仕様の違いでしょうか?
0310デフォルトの名無しさん2006/04/08(土) 16:06:58
>>309
文字定数の型が変わった。
Cではint
C++ではchar
0311デフォルトの名無しさん2006/04/08(土) 16:13:11
そもそもなんでchar が文字定数の方じゃなかったんだろうなぁ。
0312デフォルトの名無しさん2006/04/08(土) 17:35:42
Cにsigned/unsigne char, signed/unsigned shortの右辺値は存在しないから文字定数の型はintになった。
C++では多重定義するとき、文字定数がcharでないと不便だから、上記の型の右辺値も存在することになった。

D&Eには、文字定数がintではcout << 'a';というコードが
画面にaの文字コードを出力することになってしまうので文字定数をchar型にした、という話が載っている。
0313デフォルトの名無しさん2006/04/08(土) 17:46:55
ではC++では、charからintへの格上げってされないの?
0314デフォルトの名無しさん2006/04/08(土) 17:51:00
>>313
されるよ。格上げ以前の値を使うこともできるだけ。
0315デフォルトの名無しさん2006/04/08(土) 17:53:55
>>307-308
う〜ん…色々試してみます。ありがとうございます。
0316デフォルトの名無しさん2006/04/09(日) 11:31:54
質問です。XP、.NET です。

basic_string<wchar_t> で与えられたファイル名のファイルをオープンしようと思います。
ファイルの操作に、boost::filesystem を利用しようとしたのですが、
boost::filesystem::path が Unicode に対応していないっぽいです。
wchar_t -> char に変換する方法を調べたのですが(std::locale、mbtowc など)、色々と複雑っぽいです。

どのようにするのが一般的でしょう?
よろしくお願いします。
0317デフォルトの名無しさん2006/04/09(日) 11:55:39
ttp://msdn2.microsoft.com/ja-JP/library/ms235631.aspx
ググってすぐに見つかるここに書いてあるじゃねーか
03183162006/04/09(日) 12:12:26
>>317
あれ・・・検索ワードが悪かったようです。ありがとうございました。
0319デフォルトの名無しさん2006/04/09(日) 23:07:46
template <???? T>
の????は、classとtypenameと、どっちが主流なんですか?
タイピングの楽さはclassだけど、意味的にはtypenameのような
感じですが・・・。
0320デフォルトの名無しさん2006/04/09(日) 23:18:16
禿も好きにしろ、どっちでもいいってんだから好きなほう使え。
0321デフォルトの名無しさん2006/04/09(日) 23:36:32
だから禿てないって
0322デフォルトの名無しさん2006/04/09(日) 23:38:16
えっ?
禿げてるよ?
0323デフォルトの名無しさん2006/04/10(月) 01:42:23
簡単なDLLの読み込みするものを作って実行したら、
下の、MessageBox(hDlg,DLL_buf,"Success!", MB_ICONWARNING);の部分と、終了時に
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. 
This is usually a result of calling a function declared with one calling convention
 with a function pointer declared with a different calling convention.
とエラーが出ます。

強行するとちゃんと動作するんですけど…いまいちどこら辺がマズいのかがわからないです。

DLL部分
LPTSTR WINAPI ReturnString(int i, LPTSTR str){
 _stprintf(str, "%d", i);
 lstrcmp(str, "が入力されました。");
 return str;
}

読み込み側
typedef LPTSTR (*TFUNC)(int, LPTSTR);
〜中略
 HINSTANCE hDLL;
 TFUNC fncDLL01;
 TCHAR DLL_buf[128];
 if( !(hDLL = LoadLibrary("CE60_def.dll")) ){
  MessageBox(hDlg,"ERROR!\nDLLが見つからない。","エラー", MB_ICONWARNING);
 }else if( !(fncDLL01 = (TFUNC)GetProcAddress(hDLL, "ReturnString")) ){
  FreeLibrary(hDLL);
  MessageBox(hDlg,"ERROR!\n関数が見つからない。","エラー", MB_ICONWARNING);
 }else{
  fncDLL01(10,DLL_buf);
  MessageBox(hDlg,DLL_buf,"Success!", MB_ICONWARNING);
  FreeLibrary(hDLL);
以下略
03243232006/04/10(月) 01:53:13
一応環境はWin32ですけど、

コンソールアプリケーションで同じ事やっても同じエラーが出ます。
0325デフォルトの名無しさん2006/04/10(月) 02:04:57
>>323
TFUNCを確認すること。
typeid(TFUNC).name()を試してみればいい。

正しい型は次のようになるはず

//マルチバイト
char * (__stdcall*)(int,char *)

//UnicodeVC7.1の場合
unsigned short * (__stdcall*)(int,unsigned short *)

エラーメッセージから察するに、__cedcl規約で呼び出していそうだが。



//試してみて気づいたんだが、VC7.1では、typeid(wchar_t).nameが、unsigned shortになるんだな。
0326デフォルトの名無しさん2006/04/10(月) 02:17:37
>>323
後そのコード、何のためにLPTSTRを使っているのか、さっぱりわからない。
MessageBoxの第三引数に、確実にマルチバイトを渡してしまっているから。
0327325-3262006/04/10(月) 02:25:33
ごめん。
/Zc::wchar_tを指定してなかったOrz
0328デフォルトの名無しさん2006/04/10(月) 03:00:38
>>325
なるほど…
確かに、WINAPI修飾子だと__stdcallの設定なのに、
TFUNCが__cedclになってます。

…
typedef LPTSTR (*TFUNC)(int, LPTSTR); 
をどのように変更すれば、_stdcallにできるのですか?


LPTSTRを使っているのは特に何も考えていないです…
最初は普通にchar *使っていたんですが、
読んでいた本と助言でLPTSTRを使えといわれて、こちらを使っているだけです。
一応Unicodeになったときのことも考えておけとのことで(あんまりよくわかってないんですけれども)。
03293282006/04/10(月) 03:03:35
typedef LPTSTR (WINAPI *TFUNC)(int, LPTSTR);  
こんな感じで大丈夫ですか?
03303252006/04/10(月) 03:14:10
>>328
もしその本が、マルチバイト文字とワイド文字を考慮しろといいながら、
文字列を_TEXT()とか_T()マクロなど包んでいないなら、読む価値はない。

関数ポインタのtypedefはそれでいい。

あと、関数ポインタの宣言がややこしかったら、こんな方法もあるにはある。

typedef LPTSTR WINAPI FuncType(int, LPTSTR) ;
typedef FuncType *FuncPtr ;
0331デフォルトの名無しさん2006/04/10(月) 21:16:01
>>330
元の文字がそれぞれの文字コードに対応させてなければ意味がないんですね…
全然そんなこと考えてませんでしたil|i

typedefがどうなっているのか分かっていなかったので、助かりました。

ご教授して頂き、どうもありがとうございました。
0332デフォルトの名無しさん2006/04/10(月) 22:00:20
//ProcessManager.h
#ifndef _PROCESSMANAGER_H_
#define _PROCESSMANAGER_H_

#include <windows.h>
#include <tlhelp32.h>
#include <list>

class CProcessManager
{
private:
 list<PROCESSENTRY32> m_List;
public:
 HRESULT Update();
};

#endif

list<PROCESSENTRY32> m_List;の行で「error C2143: 構文エラー : ';' が '<' の前にありません。」が出る。
PROCESSENTRY32構造体をintに変更してやってみてもエラー。クラス内でlistは使えないの?
0333デフォルトの名無しさん2006/04/10(月) 22:02:53
恐ろしいことに気づいた。
using namespace std;してない。
0334デフォルトの名無しさん2006/04/10(月) 22:41:11
main()
{
char *str ="abc";
printf("%s\n",str);
}

これってどこか問題有りですか?
0335デフォルトの名無しさん2006/04/10(月) 22:44:10
>>334
あまり誉められた書き方とは言えないが、
それをコンパイルして作られたプログラムは問題なく実行できる。
0336デフォルトの名無しさん2006/04/10(月) 22:44:44
>>334
問題ない。
0337デフォルトの名無しさん2006/04/10(月) 23:01:57
>>335
>>336
ありがとう。

main()
{
char *str;
str = "abc":
printf("%s\n",str);
}

これだと危険になるんですか?
0338デフォルトの名無しさん2006/04/10(月) 23:04:18
>>337
ほぼ確実に落ちる
0339デフォルトの名無しさん2006/04/10(月) 23:06:23
は?
0340デフォルトの名無しさん2006/04/10(月) 23:14:34
>>337
それも>>335。
03413382006/04/10(月) 23:47:49
ごめん。ほんと。俺が悪かった。ごめん。
0342デフォルトの名無しさん2006/04/10(月) 23:50:10
>>337
危険じゃないが、
main()
{
char str[4];
str = "abc":
printf("%s\n",str);
}
とか
main()
{
char str[] = "abc":
printf("%s\n",str);
}
の方がいいんじゃないかなぁ。
0343デフォルトの名無しさん2006/04/10(月) 23:55:29
>>342
落ち着け特に前半。
0344デフォルトの名無しさん2006/04/10(月) 23:56:45
>>342
main()
{
char str[4];
str = "abc":
printf("%s\n",str);
}
0345デフォルトの名無しさん2006/04/10(月) 23:58:20
>>342>>344
セミコロンがコロンになっているのをスルーしているのはわざとなのか?
0346デフォルトの名無しさん2006/04/11(火) 00:24:35
つーかconst使えよ
0347デフォルトの名無しさん2006/04/11(火) 00:28:59
int main()
{
const char *str = "abc";
printf("%s\n",str);
return 0;
}
0348デフォルトの名無しさん2006/04/11(火) 00:45:29
つーかstatic使えよ
0349デフォルトの名無しさん2006/04/11(火) 00:47:16
int main()
{
puts("abc");
return 0;
}
0350デフォルトの名無しさん2006/04/11(火) 01:13:27
>>333
ヘッダで using namespace するやつは腹を切って死ぬべきである。
03513372006/04/11(火) 07:14:03
参考になりました。
ありがとうございました。
0352デフォルトの名無しさん2006/04/11(火) 10:32:56
>>344はstrcpyを使うべきですか?
0353デフォルトの名無しさん2006/04/11(火) 11:10:31
char str[] = "abc";

char str[4];
strcpy(str, "abc");

どっちでも、同じといっちゃ同じだが前者のほうがはるかに良い
0354デフォルトの名無しさん2006/04/11(火) 11:17:46
>>352
うん。
まああの例だと、わざわざコピーする意味もないけど。
0355デフォルトの名無しさん2006/04/11(火) 13:52:47
ヘッダで using namespaceしないやつは時代遅れ
0356デフォルトの名無しさん2006/04/11(火) 14:01:51
なんだ、基地外か
0357デフォルトの名無しさん2006/04/11(火) 14:04:06
>>355
本物の基地外は決して自分を基地外とは思わないって知ってるか?
0358デフォルトの名無しさん2006/04/11(火) 14:10:02
まぁ using namespace もいいとおもうけど、
ピンポイントで using mynamespace::myclass;
みたに爆撃するのもいいと思うよ。
0359デフォルトの名無しさん2006/04/11(火) 14:17:03
namespace kitigai
{
>>355
}
0360デフォルトの名無しさん2006/04/11(火) 15:30:03
using namespace kitigai;
0361デフォルトの名無しさん2006/04/11(火) 15:35:59
namespace
{
 namespace kitigai
 {
  >>355;
 }
}
0362デフォルトの名無しさん2006/04/11(火) 17:38:59
ヘッダで using namespace なんてするなよw
0363デフォルトの名無しさん2006/04/11(火) 18:09:54
漢ならC++標準のヘッダを書き換えろ
0364デフォルトの名無しさん2006/04/11(火) 18:18:29
なんか sin とかってグローバルな名前空間で
宣言されている気がするのは俺だけ?
0365デフォルトの名無しさん2006/04/11(火) 18:42:30
math.hのsin関数か?
0366デフォルトの名無しさん2006/04/11(火) 18:47:20
Visual C++なんかの<c〜>は規格での規定とは逆に、
<〜.h>をインクルードして、std名前空間の中で、using ::hoge;のようなことをしている。
0367デフォルトの名無しさん2006/04/11(火) 19:06:00
#include <cmath> ってしてるのに
グローバルな sin() 関数が見えるのは規格違反?
>>366 みたいに using ::hoge; なんてやると、
グローバルにも hoge は見えてるんだよね・・・
0368デフォルトの名無しさん2006/04/11(火) 23:19:29
C、Winのユーザー関数の引数の順番を
決めるいい方法は無いですかね。
もちろん、どんな順番でも可変個引数以外なら
問題ないんですけど、関数名と同じく迷ってしまいます。
何か、法則みたいなのがあるといいんですが。
0369デフォルトの名無しさん2006/04/11(火) 23:27:20
>>368 「Winのユーザー関数」って?
0370デフォルトの名無しさん2006/04/11(火) 23:28:35
>>368
Winって言うから、__fastcall使うとして。
そうすると、レジスタ渡ししたいモノを先頭(だったかな)にまとめるといいかもな。
03713682006/04/11(火) 23:30:19
そんな難しい意味じゃないです。
ただ、環境がWindowsって意味です。
0372デフォルトの名無しさん2006/04/11(火) 23:39:21
>>368
俺はとりあえず次の2つを守っている。
入力の引数同士、出力の引数同士は混ぜない。
ハンドルなどのように、クラスだったら(呼んだ関数の先で)thisに相当するような引数は第1引数に持ってくる。
0373デフォルトの名無しさん2006/04/11(火) 23:44:50
俺は自分で作った関数でも間違えて引数を渡してしまったりする。
たとえば学生番号と年齢を与えるようなときに、
どちらも整数だから void func(const int age, const int number);
なんてプロトタイプ宣言していると間違えても気づかないことが多い。

なので、 BOOST_STRONG_TYPEDEF (とそれを自分で改造したマクロ)で
紛らわしいものは型付けしてミスを防ぐようにしてる。
0374デフォルトの名無しさん2006/04/11(火) 23:51:46
>>367
Cのヘッダを非推奨にしたのはやりすぎだったと標準化委員会も反省しているようだ。
03753682006/04/11(火) 23:53:38
ありがとうございます。

ある程度、ライブラリ関数に似た用途のがあると
それに似せる事が出来て楽なんですけど。
例えば、ビットマップを透過して表示するユーザー関数なら、
BitBltをベースにして、その先画像、元画像の後に
マスク画像を同じような感じに続けています。

その教えていただいた方法も、ライブラリ関数の形に
何となく合致している部分がありますね。
一つ目にHDCとかが来ることが多いですし、
入力、出力ではないけど、先画像、元画像とまとまっていますし、
それによって、引数の型の並びの所々違う型が入る事で、
引数の識別するアクセントになりますし。
0376デフォルトの名無しさん2006/04/11(火) 23:54:38
>>368
buf1にbuf2をxサイズ分コピー   memcpy(buf1, buf2, size)
処理の内容を言葉に置き換えればいい
03773682006/04/12(水) 00:09:24
>>376
ありがとうございます。
引数が少ない場合はシンプルでいいと思うんですけど。
ただ、多い場合でも、迷った場合は、そのシンプルベースで
始めに決めてしまったやり方で行くのも手かもしれません。
03783552006/04/12(水) 02:14:19
>>356 - >>362
釣れた釣れた
やってみるもんだな
ヘッダで using namespaceするわけないじゃん
ば〜〜〜〜〜〜〜か
0379デフォルトの名無しさん2006/04/12(水) 02:22:11
>>378
え? やっちゃだめなのか? 何で?
0380デフォルトの名無しさん2006/04/12(水) 02:23:09
>>379 namespace が何のために使われるのか知っていればほとんど自明。
0381デフォルトの名無しさん2006/04/12(水) 02:24:10
まぁヘッダの中で、あるネームスペースの中で
別のネームスペースを using するんなら有りだろうけどなぁ。

namespace NS1 {
   using namespace OtherNS;

}

みたいにさ。
0382デフォルトの名無しさん2006/04/12(水) 02:50:03
ヘッダでusing namespaceするのは良くないと思うが、
やったからといって名前空間の利点がなくなる訳じゃないだろ。
0383デフォルトの名無しさん2006/04/12(水) 03:08:36
namespace は閉じていない。あとでいくらでも宣言を追加できる。
そのため、将来の変更やヘッダの組み合わせによっては曖昧な名前を生み出す可能性が有る。
それでも、 using namespace が原因だとわかったら削除すればいいんだが、
ヘッダでやられると問題が発生したときにユーザー側で回避する手段が無い。

しかも using namespace が本当に必要に迫られることは決して無い。
フルで修辞すればいいんだから。

確実な回避策があるのに、深刻な問題を起こす可能性をヘッダに埋める道理は無い。
03843152006/04/12(水) 04:37:56
>>308
制限なし一行入力の質問をした者です。
バッファを2倍にしていく…を自分なりに考えたのですが
こんな感じで良いのでしょうか?

char *str;
char *tmp;
int strsize;
int tmpsize;
strsize = 1;
str = (char *)malloc(strsize); if(str==NULL) exit(1);
str[0] = '\0';
tmpsize = 8;
tmp = (char *)malloc(tmpsize); if(tmp==NULL) { free(str); exit(1); }
for(;;) {
 char ch;
 tmpsize = tmpsize * 2;
 tmp = (char *)realloc(tmp, tmpsize); if(tmp==NULL) { free(tmp); free(str); exit(1); }
 fgets(tmp, tmpsize, stdin); if(tmp==NULL) { free(tmp); free(str); exit(2); }
 strsize = strlen(str) + tmpsize;
 str = (char *)realloc(str, strsize); if(str==NULL) { free(tmp); free(str); exit(1); }
 strcat(str, tmp);
 ch = str[strlen(str)-1];
 if(ch=='\0' || ch=='\n') break;
}
free(tmp);
printf("%s\n", str);
free(str);
0385デフォルトの名無しさん2006/04/12(水) 07:47:49
冗長すぎ。これで十分
int strsize = 1,strpos=0;
char *str = NULL;
do{
    char *tmp = (char *)realloc(str, strsize *= 2);
    if(tmp==NULL) { free(str); exit(1); }
    str = tmp;
    if(fgets(str+strpos, strsize-strpos, stdin) == NULL)break;
    strpos += strlen(str+strpos);
}while(str[strpos-1] != '\n');
puts(str);
free(str);
0386デフォルトの名無しさん2006/04/12(水) 19:32:13
C99でint32_tなどのサイズ固定の整数が定義されましたが、
floatについてはこのようなものはないのでしょうか?
0387デフォルトの名無しさん2006/04/12(水) 20:09:08
クラスBはクラスAを継承していて、Aの仮想関数func()をオーバーライドします。
このとき、Bのfunc()の中でAのfunc()(オーバーライドされてないもの)を
呼び出したいのですが、どう書けばいいですか?
0388デフォルトの名無しさん2006/04/12(水) 20:12:25
A::func()
0389デフォルトの名無しさん2006/04/12(水) 20:27:19
>>388
うまくいきました。ありがとう。
03903842006/04/12(水) 21:32:50
>>385
fgetsの第一引数に加算すると
文字列の途中から追加出来るのですね。
びっくりしました。感謝です。

という事は、*tmp使わなくても実装出来てしまう?
と思ったので、色々試してみます。
0391デフォルトの名無しさん2006/04/13(木) 07:41:14
異なるファイルに記述したテンプレートクラスの呼び出し方がわかりません。
以下のようなコードだとリンクエラーがでます。
全部同じファイルに記述するとコンパイル通るんだけど、なんででしょ?
コンパイラはVC++6.0です。以下ソース

// main.cpp ==============================//
#include "foo.h"
int main( void ){
foo<int> obj;
return 0;
}

// foo.cpp ===============================//
#include"foo.h"
template <class Type> foo<Type>::foo(){;}

// foo.h =================================//
template <class Type> class foo{
public:
foo<Type>();
};
0392デフォルトの名無しさん2006/04/13(木) 07:52:25
>>391 テンプレートの定義はほとんどヘッダでやる必要がある。超 FAQ だから適当に探せ。
0393デフォルトの名無しさん2006/04/13(木) 07:54:33
>>391
http://www.google.co.jp/search?q=template+%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%A8%E3%83%A9%E3%83%BC+export
0394デフォルトの名無しさん2006/04/13(木) 08:02:05
foo.cpp のテンプレートの定義は、単なる定義で、
テンプレートインスタンス=コードが生成されていないから。
main.cpp は int で特殊化された foo のインスタンスがリンクされることを期待している。
0395デフォルトの名無しさん2006/04/13(木) 09:27:56
export使えるコンパイラってある?
0396デフォルトの名無しさん2006/04/13(木) 09:32:50
>>395 http://www.comeaucomputing.com/
0397デフォルトの名無しさん2006/04/13(木) 09:34:36
>>391
まあ、翻訳単位が違っても、コンパイルできるようにするキーワードは、規格にはあるんだが。
実際、サポートしているコンパイラは少ない。

特にVC6でテンプレートなんてお察し

明示的にインスタンス化するという方法はある。

//=============foo.cpp==============
template class foo<int> ;
template class foo<short> ;
//以下、インスタンス化するすべての型について、明示的にインスタンス化していく。

実際、コピペの必要ない、文法上安全なマクロという気しかしないが。
インスタンス化できる型を制限したいときとかもいいのかな。
0398デフォルトの名無しさん2006/04/13(木) 10:04:45
>まあ、翻訳単位が違っても、コンパイルできるようにする
>キーワードは、規格にはあるんだが。

あれ、そんなのあったんですか。
0399デフォルトの名無しさん2006/04/13(木) 10:11:17
export
0400デフォルトの名無しさん2006/04/13(木) 10:25:41
ああ、 >>395 ってその話だったのか・・・
extern って空目してて、
「なに extern とかほざいてんだこいつwww」
とか思ってた、スマソ
0401デフォルトの名無しさん2006/04/13(木) 12:03:26
質問があります。

SYSTEMTIME構造体の startTime という変数があり、
そこには何かの処理の開始日時がセットされています。
DWORD型の lateSecという変数があって、
そこには処理にかかる予想時間が秒を単位としてセットされています。
その場合の処理の終了日時を求めたいのですが、
どのようなやりかたがスマートでしょうか?

lateSecを日、時、分、秒の各単位にしてstartTimeの各メンバ変数に足すだけでは、
秒や分の部分が59を超えたり、時の部分が23を超えたりしてしまいます。
日の部分も、その月ではありえない日になってしまうかもしれません。
この問題を考えていたら、解決方法が全然見えなくなってしまいました。

簡単に言えば
void func(
OUT LPSYSTEMTIME lpEndDateTime, /* 終了予想日時 */
IN LPSYSTEMTIME lpStartDateTime, /* 開始日時 */
IN DWORD dwLateTime /* 処理予測時間[sec] */
);
のような関数をつくりたいということになります。

よろしくおながいします
0402デフォルトの名無しさん2006/04/13(木) 12:17:06
1.SystemTimeToFileTimeでFILETIMEに変換
2.FILETIMEに対して演算
3.FileTimeToSystemTimeでSYSTEMTIMEに戻す
0403デフォルトの名無しさん2006/04/13(木) 12:31:16
エラー処理を無視するとこんな感じ?

void func(
OUT LPSYSTEMTIME lpEndDateTime, /* 終了予想日時 */
IN LPSYSTEMTIME lpStartDateTime, /* 開始日時 */
IN DWORD dwLateTime /* 処理予測時間[sec] */
)
{
 FILETIME ft;
 SystemTimeToFileTime(lpStartDateTime, &ft);

 unsigned __int64 et = (((unsigned __int64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
 et += (unsigned __int64)dwLateTime * 10 * 1000 * 1000;

 ft.dwHighDateTime = (DWORD)(et >> 32);
 ft.dwLowDateTime = (DWORD)(et & 0xFFFFFFFF);

 FileTimeToSystemTime(&ft, lpEndDateTime);
}
04043912006/04/13(木) 12:57:24
>>392-397
多謝。
0405デフォルトの名無しさん2006/04/13(木) 14:55:50
>>401
標準だとmktime()とlocaltime()じゃないかな。
値の範囲が正しくない場合 mktime() は正規化するって
規格で読んだ気がする。
0406デフォルトの名無しさん2006/04/13(木) 15:45:43
>>402-403
どうもありがとうございました。
これの動作確認ができました。
閏年の2/28や2/29に関しても、日をまたぐようにしてテストをして
みましたが問題ありませんでした。
どうもありがとうございました。
0407デフォルトの名無しさん2006/04/13(木) 19:01:18
>403
__int64 ft=0;
SystemTimeToFileTime( (FILETIME*)&ft);
ft += dwLateTime * __int64(10*1000*1000);
(略)
でいいきもする。
0408デフォルトの名無しさん2006/04/13(木) 19:23:55
> __int64(10*1000*1000)
10ll * 1000 * 1000でいいと思う。
10llがだめなら10i64で。
0409デフォルトの名無しさん2006/04/13(木) 20:21:13
ヘタに凝ったことをするよりは、>>403や>>407の書き方が無難で分かりやすいと思うけどな。
0410デフォルトの名無しさん2006/04/13(木) 20:23:10
ポータビリティを考えると、__int64はint64_tとかでtypedefできるけど、
サフィックスのllとかi64はtypedefで解決できないからだめ。
0411デフォルトの名無しさん2006/04/13(木) 22:33:24
ならキャストを使えばよい。
0412デフォルトの名無しさん2006/04/13(木) 23:47:59
403->407->408->410の流れ
0413デフォルトの名無しさん2006/04/14(金) 02:37:46
エディタの検索機能に正規表現の機能を付けようと考えています。
後ろから(下から上)検索させる所で躓きました。良い方法があれば教えてください。

現在、考えている方法としては・・・
1) .NET frameworkのRegexクラスにRightToLeftのオプションを付けて使用(ラッパーとなるDLLを作成?)
2) Boost.Regexや、IRegExp(VBScript)を用いて・・・
  i) ヒットするまで後ろから前へ開始位置をずらしていく
  ii) 文字列,パターンを反転させる
3) 諦めて前から後ろのみの検索とする

1の方法が最有力候補なのですが、.NET frameworkを使うことで
動作環境が狭まるなどの問題点がありまして・・・。
0414デフォルトの名無しさん2006/04/14(金) 02:42:51
まず全文に対してマッチを行い、ヒットしたものを列挙。
その結果に対し、現在地点の直前に当たるものを結果とする。
0415デフォルトの名無しさん2006/04/14(金) 03:13:45
OPENFILEダイアログを使うと何故か仮想画面からの
コピーが機能しなくなるんだが原因がわかる人いる?
0416デフォルトの名無しさん2006/04/14(金) 03:23:16
仮想画面ってなんのだ?
というか、もっと環境とか詳しく書かないと返答もらえにくいんじゃね?
0417デフォルトの名無しさん2006/04/14(金) 03:30:35
いじめないで! ぼく わるいC++じゃないよ!
0418デフォルトの名無しさん2006/04/14(金) 03:32:02
スーファミのDQは65816のアセンブラで書かれていたって本当か?
PS/PS2版はさすがにgccらしいけど。
0419デフォルトの名無しさん2006/04/14(金) 03:35:28
どこの誤爆だ?
0420デフォルトの名無しさん2006/04/14(金) 07:27:39
>>414
回答ありがとうございます。
検討してみます。
0421デフォルトの名無しさん2006/04/14(金) 08:58:17
>>414
全文はまずいのでは?
現在位置までのデータで列挙しないと。
0422デフォルトの名無しさん2006/04/14(金) 11:54:03
>>411
*(__int64 *)&ft += (__int64)dwLateTime * 10 * 1000 * 1000;

こうですか?わかりません><
0423デフォルトの名無しさん2006/04/14(金) 14:38:28
>>420
え? 414でいいのか?
414みたいなやり方じゃ遅くなるから413の質問になるんじゃないのか?
0424デフォルトの名無しさん2006/04/14(金) 19:48:28
質問です。
WinMainで、ウィンドウの作成後にSetHWnd(HWND hWnd){s_hWnd = hWnd;};
を使ってウィンドウハンドルを獲得し、別のヘッダで宣言した
int MakeMessageWindow(LPCTSTR MessageText, LPCTSTR WindowText, UINT MessageForm)
{return(MessageBox(s_hWnd, MessageText, WindowText, MessageForm));};
でメッセージボックスを作るプログラムなのですが、
WinMain(WinMain.cpp)以外のヘッダ(B.h)で宣言した関数の中で
MakeMessageWindow()を呼び出すと、MessageBoxの引数hWndがNULLになってしまいます
値渡しなのでhWndは変わらないと思っていたのですが、
この場合なぜhWndがNULLになってしまうのでしょうか?
0425デフォルトの名無しさん2006/04/14(金) 20:25:14
>>424
s_hWndは何かのクラスメンバなの?
0426デフォルトの名無しさん2006/04/14(金) 21:00:34
>>425
MakeMessageWindowを宣言しているヘッダ(C.h)のクラスのprivateメンバです
0427デフォルトの名無しさん2006/04/14(金) 21:09:14
MakeMessageWindowはそのクラスのメンバ関数なの?
0428デフォルトの名無しさん2006/04/14(金) 21:09:58
つーか、何がどのクラスのメンバなのかさっぱりわからん。
0429デフォルトの名無しさん2006/04/14(金) 21:20:48
>>427-428
C.hにs_hWnd、MakeMessageWindow()、SetHWnd()が有ります
s_hWndはSetHWnd()を使って、WinMainのウィンドウ作成後にHWNDを値渡ししています
WinMain.cppとB.hからMakeMessageWindow()を呼び出そうとすると、
WinMain.cppから呼び出した場合はs_hWndに作成したウィンドウのHWNDが
入っていますが、B.hから呼び出した場合だとs_hWndにNULLが入ってしまいます
0430デフォルトの名無しさん2006/04/14(金) 21:26:25
ソース
0431デフォルトの名無しさん2006/04/14(金) 21:27:23
醤油
0432デフォルトの名無しさん2006/04/14(金) 21:30:58
マヨネーズ
0433デフォルトの名無しさん2006/04/14(金) 21:35:40
>>429
s_hWnd, MakeMessageWindow(), SetHWnd()
は同じクラスに属しているの?
0434デフォルトの名無しさん2006/04/14(金) 21:39:56
>>433
同じクラスです
s_hWndはprivate、二つの関数の方はpublicで宣言しています
0435デフォルトの名無しさん2006/04/14(金) 21:40:57
WinMain.cppとB.hでは同じインスタンスに対して操作してるのか?
0436デフォルトの名無しさん2006/04/14(金) 21:51:06
>>435
s_hWndは値渡しですので変わらないと思います
その他の3つはそれぞれ、メッセージボックスに表示する文章、ウィンドウに表示される文章
作るメッセージボックスの形式(それぞれ、OKのみ、はい/いいえ)が変化しています
0437デフォルトの名無しさん2006/04/14(金) 21:57:33
いやそういう意味じゃなくて。

class A
{
public:
void Set(int i) { value = i; }
private:
int value;
};

A a1, a2;

a1.Set(10);
a2.Set(30);

とした場合、a1.value は10のままなのは理解できてる?
0438デフォルトの名無しさん2006/04/14(金) 22:07:08
>>437
すいません、今知りました
この場合私の言っていたs_hWndはWinMain.cppに対してだけの物で、B.hで使用するにはB.h、
もしくはB.cppの中でSetHWndをする必要があるという事でよろしいでしょうか?
0439デフォルトの名無しさん2006/04/14(金) 22:13:28
さぁ、ケースバイケースじゃね?
WinMain.cppとB.hで同じインスタンスに対して操作したいなら
グローバル変数にするとか。
0440デフォルトの名無しさん2006/04/14(金) 22:14:05
s_が付いてたからstaticだと思ってた俺。
0441デフォルトの名無しさん2006/04/14(金) 22:26:52
>>439
グローバル変数だと大丈夫でしたか
皆様ありがとう御座いました。やってみます
0442デフォルトの名無しさん2006/04/14(金) 22:34:38
>>423
そうなんですよね。それで前述の通り、今、検討している内容の中で
.NET frameworkを用いるのが、動作としては一番好ましいのですが。
現在設定してある動作環境(Win98〜 or Win95 + IE4〜)に当てはまる
人の中で動作しない人が出るのは・・・という状況です。
0443デフォルトの名無しさん2006/04/14(金) 22:41:33
>>441
その前にC/C++の基礎からやり直した方がいいと思うぞ。
0444デフォルトの名無しさん2006/04/15(土) 13:32:17
C++の標準例外クラスにout_of_rangeとrange_errorがありますが、
これの違いがいまいちわからんのですが、runtime_errorとlogic_errorの
違いってだけなんでしょうか。
0445デフォルトの名無しさん2006/04/15(土) 13:50:16
>>444 じつはそのへん、良く悩むんですよ、俺も。
C では assert していたところで代わりに例外使おうと思うんですが、
意味からすると assert の代わりは logic_error かその派生クラスを
投げるべきですよね。だけど果たしてこの例外が
runtime_error にふさわしいのか logic_error にふさわしいのか、
結構悩むケースもあります。

http://www.geocities.jp/ky_webid/cpp/library/027.html
http://www.02.246.ne.jp/~torutk/cxx/exception/stdexceptions.html
http://cppemb.blog17.fc2.com/blog-entry-6.html


関連スレ?(DAT落ち)
http://pc5.2ch.net/test/read.cgi/tech/1051690231/
0446デフォルトの名無しさん2006/04/15(土) 16:06:29
ファイル出力する名前に変数iの数字を入れたいのですがどうすればいいのでしょうか?

for( int i; i < 10; i++){
 ofstream fout("sample" (ここに変数iの数字を入れたい) ".txt");
 fout << "hoge\n";
 fout.close();
}
 
0447デフォルトの名無しさん2006/04/15(土) 16:22:26
stringstreamとかsprintfを使ってファイル名を成形
0448デフォルトの名無しさん2006/04/15(土) 16:24:32
>>446
boost::lexical_cast <string> (i)
04494462006/04/15(土) 16:59:25
>>447-448
ありがとう〜
やっぱりVBとかperlとかのように繋げられないのか〜
0450デフォルトの名無しさん2006/04/15(土) 17:44:53
("sample" + i + ".txt")
04514442006/04/15(土) 19:15:00
>>445
レスどうもです。
やっぱり微妙ですか。
自分で好きなほう使えばいいってレベルですよね。
クラス名が違うだけって話で。
0452デフォルトの名無しさん2006/04/15(土) 19:58:30
環境依存の質問をしてもいいでしょうか?
今度HP-UXで動くソケット通信のプログラムを作ることになったのですが、
ソケット通信に使うライブラリとかってBSDと同じなのでしょうか?

環境によってライブラリの内部は違ってもインクルートするヘッダーとか
リンクするライブラリ名は同じで、プログラムの実装方法は一緒と考えてもいいでしょうか?
0453デフォルトの名無しさん2006/04/15(土) 20:32:56
独習C++の次は何読んだらいいんだ?
Cマガジンが出してる奴か?
あれ結構まともな感じしたんだが。
0454デフォルトの名無しさん2006/04/15(土) 20:53:05
>>453
好きなもん嫁
0455デフォルトの名無しさん2006/04/15(土) 21:02:00
>>452
こんな奴が実装したプログラムなんて使いたくないな
0456デフォルトの名無しさん2006/04/15(土) 21:11:21
Cを勉強しようと思ってる人には何て本が分かりやすくてお薦め?
0457デフォルトの名無しさん2006/04/15(土) 21:15:55
>>456
図書スレ池
0458デフォルトの名無しさん2006/04/15(土) 21:45:54
MSペイントに塗りつぶし機能がありますが、
あれはどういうアルゴリズムで実装しているのでしょうか。

自分のやり方は、データの全マスを何回か調べて、
広げられる位置をチェックしていくやり方ですが、すごく遅いです。

環境は、C言語、BCC、9x系です。
0459デフォルトの名無しさん2006/04/15(土) 21:52:29
>>455
わからないならグダグダいわないで、わかりません、だろ?
0460デフォルトの名無しさん2006/04/15(土) 21:56:43
>>458
画像処理 その6
http://pc8.2ch.net/test/read.cgi/tech/1140510670/

こういうスレもあるが、その程度ならここでもいいか

ペイントがどうやってるかしらないけど、とりあえず全体を調べる必要はないね
画像処理だかはさっぱり知らないけど、俺が考えたやり方だと
クリックしたマスと、その上下左右のマスが同じ色かどうかを調べる
同じ色だったら、そのマスに対して上下左右のマスが同じかどうかを調べる
ってのを再帰的に繰り返して同じ色のマスだけ塗りつぶす
もちろん、一度調べたマスにはなんらかのフラグを立ててもう一度調べることが無いようにする
0461デフォルトの名無しさん2006/04/15(土) 22:06:45
string型にlong型の数字を入れられるのでしょうか?
0462デフォルトの名無しさん2006/04/15(土) 22:13:48
>>461 そりゃ、文字列化したら入れられる。たとえば
int i=199;
std::ostringstream os;
os << i;
std::string s = os.str();
0463デフォルトの名無しさん2006/04/15(土) 22:20:13
>>461
>>448
04644582006/04/15(土) 22:36:58
>>460
ありがとうございます。
その方法を試してみます。
0465デフォルトの名無しさん2006/04/15(土) 23:01:03
>>458
API呼んでるだけじゃね?
0466デフォルトの名無しさん2006/04/15(土) 23:07:22
全くの初心者です。
少し前(一年くらい?)に買ったC++入門書を引っ張りだしてきました。
この本だと
#include <iostream.h>
と書かれているんですが、ネットの初心者向けサイトを見ると
#include <iostream>
using namespace std;
となってます。
これは本が古いからでしょうか?
それとも色んなやり方があってどっちでも良いんでしょうか?
0467デフォルトの名無しさん2006/04/15(土) 23:13:26
本が古いから。
04684662006/04/15(土) 23:29:22
そうでしたか。
そんじゃ明日本屋に行ってみます。どうもです。
0469デフォルトの名無しさん2006/04/15(土) 23:59:02
>>458
「閉領域 フィル アルゴリズム」あたりでググってみろ。
04704582006/04/16(日) 02:12:37
自分のやり方は、まだチェックしていないマスの回りのマスを調べて、
ひとつでもチェックしたマスがあるならそのマスをチェックするやり方でした。

調べる位置の順番は、クリックした位置を中心ではなく、
普通にxとyの2次元フォーで調べていきます。
始めは左上から右下、次は右下から左上に進めていきます。
図形が複雑な場合は、左上から、右下からを何回か行います。

その回りの位置を調べる関数へのオーバーヘッドが遅いのか、
左上から、右下からが1回ずつの場合でもかなり遅いです。

>>465
なるほど。APIを探してみます。

>>469
そのキーワードで良さそうな所を見つけられました。
「C言語 for アルゴリズム 塗りつぶし」
とかで見ていたんですけど、書籍ばっか出てきてダメでした。
04714582006/04/16(日) 02:26:44
新たに編み出した方法も書きます。

同じように全マスを順番にチェックするタイプです。
今度はカウンタが進む方向が4パターンあり、
左上から、左上から(x, yを逆にカウンタを進める)、
右下から、右下から(x, yを逆にカウンタを進める)です。

チェックした位置が見つかると(始めの位置は当然クリックした位置)、
別の色が現れるまで、カウンタを進める方向にチェックし続けます。

円とか長方形とかシンプルな図形を塗る場合、
カウンタを進める方向の1回目では、下方向に直線が引かれた形、
2回目では左下方向が塗られた形、3回目では、右下方向も塗られた形、
4回目で全部塗られた形になります。

この方法だと結構早いです。メモリが128Mで、画像のデータサイズ
(2次元ポインタ)は400×400なんですけど大丈夫です。

弱点は画像が複雑な場合です。
特に細長く斜め方向に伸びた図形だと、
チェック回数をかなり多くしないといけません。
0472デフォルトの名無しさん2006/04/16(日) 07:25:25
>>471
というかシードフィルでいいんじゃ
0473デフォルトの名無しさん2006/04/16(日) 08:31:37
普通は画像データが水平方向に連続しているので、ペイントアルゴリズムでは
一般的に水平線を埋める形で実装されている。
0474デフォルトの名無しさん2006/04/16(日) 12:40:19
externについての質問です。
とある書籍で、次のようなコードが使われていました。

extern void func()
{
  // 関数の実装
}

私の理解では、externを関数に修飾した場合、ただ単に「外部のどこかで宣言されている」ことを明示しているだけに過ぎず、
本来は関数宣言にのみ使うべきものだと考えておりましたので、例のような関数定義への修飾は意図が分からず戸惑ってしまいます。
このように関数定義そのものにexternを修飾することに、どのような意味があるのでしょうか?
04754742006/04/16(日) 12:41:11
外部のどこかで宣言 ではなく 外部のどこかで定義 でした orz
0476デフォルトの名無しさん2006/04/16(日) 12:45:45
>>474
関数宣言(定義も含む)に付けられたexternは無意味。
あえて言うと、staticでないことを明示している。
0477デフォルトの名無しさん2006/04/16(日) 12:58:07
>>474
関数宣言・定義に修飾がなされていないときは
規格に従ってextern修飾がなされていると判断される

明示することでわかりやすくなるから全く意味がないとは言えない
04784742006/04/16(日) 13:37:16
>>476-477
素早い返答ありがとうございます。

非staticであることを明示する、というのは考えが及びませんでした。
モヤモヤが晴れ、スッキリ読み続けられそうです。
ありがとうございました。
0479デフォルトの名無しさん2006/04/16(日) 13:40:05
>>478
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756116396/249-5821739-0535563
とりあえずこれでも読んでみたらいいんじゃないか?
面白いし、結構ためになる
0480デフォルトの名無しさん2006/04/16(日) 15:44:42
アプリケーションを終了するときのタイミングが、WM_DESTROYを捕まえた時にPostQuitMessage()を送る、と言う動作だけコーディングした場合に、
さらにWM_CREATEを捕まえた時に、-1を返す、としたら、ウインドウは生成されないけど、WM_DESTRORYが発生する事は無いから、
アプリは結局の所、PCの電源を切るとか低水準な事をしない限り終了しないって事?
0481デフォルトの名無しさん2006/04/16(日) 16:07:43
ofstreamでファイル出力するときに
tempフォルダや自分自身のexeがあるフォルダに出力するには
どんなパスを入れればいいのでしょうか?
0482デフォルトの名無しさん2006/04/16(日) 16:22:59
>>481
きっとtempフォルダや自分自身のexeがあるフォルダだよ。
0483デフォルトの名無しさん2006/04/16(日) 16:23:35
>>480 日本語でおk
0484デフォルトの名無しさん2006/04/16(日) 16:25:05
>>480
別の方法でWM_DESTRORYを送れば終了する。
0485デフォルトの名無しさん2006/04/16(日) 16:26:51
>>484
それは「低水準な事」に含まれないのか?
0486デフォルトの名無しさん2006/04/16(日) 16:29:25
>>481
環境異存。
WindowsならGetModuleFileNameを使って自分自身のファイル名を取得可能。
tempフォルダはgetenvで環境変数から取得できる。
tmpfile関数を使った方が良い場合もある。
0487デフォルトの名無しさん2006/04/16(日) 16:32:25
tmp ファイルは、環境依存を回避するために
boost 使うって言う手もある。
0488名無しさん2006/04/16(日) 16:39:19
linux g++とlibstdc++の依存関係の質問です。
g++ v3.2ではlibstdc++.5.soが、v3.4では .6.soが
リンクされますが、v3.4でも .5.soをリンクさせる方法は
ありますか?環境がばらばらなので、libstdc++について
古い環境に合わせたいのですが。よろしくお願いします。
04894812006/04/16(日) 16:46:12
>>482>>486-487
THXです
boostってよく出てきますけど、便利そうですね
勉強してみます
0490デフォルトの名無しさん2006/04/16(日) 21:35:06
板違いなら誘導お願いします。

マトリクスのプログラムを作っています。
[A] * [x] = -[B] で[x]を求めるのですが
[B]の前にある-は、どう処理すればよいですか?
0491デフォルトの名無しさん2006/04/16(日) 22:00:48
[B]に-1をかけるだけじゃないのか?
0492デフォルトの名無しさん2006/04/16(日) 22:10:22
>>491
レスありがとう。
[B]の全要素の符合を入れ替えれば
良いのでしょうか?
[0]、[-1]がイメージ出来ません。
0493デフォルトの名無しさん2006/04/16(日) 22:13:41
>>492 そうだぞ、行列の勉強しる
0494デフォルトの名無しさん2006/04/16(日) 22:14:30
せめて高校くらいでるか、もしくは行列のあまりに
基本的なことくらいは本読んで勉強するかのどちらかにしろよ
0495デフォルトの名無しさん2006/04/16(日) 22:24:18
線形代数の基礎・・・・
0496デフォルトの名無しさん2006/04/16(日) 22:25:34
ありがとうございます。
勉強します。
0497デフォルトの名無しさん2006/04/16(日) 22:42:15
>>494 いまの高卒、文系とかだと行列やらんぞ
0498デフォルトの名無しさん2006/04/16(日) 23:07:13
>>497
そもそも文系がプログラミングしようというのが間違ってるじゃないだろうか?
0499デフォルトの名無しさん2006/04/16(日) 23:10:45
>>490 和を取るときも本当は値が落ちてしまわないように
順番も考慮した方がいいんだけどな。
0500デフォルトの名無しさん2006/04/17(月) 16:36:19
ちがうな彼はもっと高度なモノを作ってる
世界を構築してるんだ
0501デフォルトの名無しさん2006/04/17(月) 16:56:37
おお!
理想郷を作ろうとしているのか!
凄いぞ!がむばれ!
0502デフォルトの名無しさん2006/04/17(月) 18:41:04
template<class T, char SEP, char *STR1>
void lines<T, SEP, *STR1>::read2(istream& is){
...
};

class problem: public <problem, '2', "Error">{
...
};

class solution: public <solution, '3', "Error">{
...
};

このコードをコンパイルすると、

   syntax error : '<'     ← <problem, '2', "Error"> の <

と出てしまうのですが、何がいけないんでしょうか?

   class problem: public lines<problem, '2', "Error">

としても

   invalid template argument for 'STR1', constant expression expected

と出てしまいます。
テンプレートに関して授業でほとんど習っていないのに、いきなり課題で出されて困っています。
どなたか教えてください。
0503デフォルトの名無しさん2006/04/17(月) 18:51:25
>>502
templateを使うには当然後者のようにlinesを指定しないといけない。
でないと、どのテンプレートなのかコンパイラには分からない。
但し、後者のエラーメッセージを読めば分かる通りテンプレート引き数であるSTR1が間違っている。
0504デフォルトの名無しさん2006/04/17(月) 19:35:45
>>480
DefWindowProc呼んでるなら終了しね?
0505デフォルトの名無しさん2006/04/17(月) 19:42:50
>>503
解決しました。ありがとうございました(´∀`)
05065022006/04/18(火) 00:29:22
>>502です。
どうやって各クラスのクラスポインタを宣言すればよいのでしょうか?
また、各クラスのインスタンスをnewを使って生成したいのですが、それもやり方がわかりませんorz
どなたか教えて下さい。
0507デフォルトの名無しさん2006/04/18(火) 01:48:00
なんかこう、>503が虚しく見えるな。
0508デフォルトの名無しさん2006/04/18(火) 01:50:12
そうか?
0509デフォルトの名無しさん2006/04/18(火) 01:51:27
なんつーか、テンプレートどころの騒ぎじゃないじゃん。
0510デフォルトの名無しさん2006/04/18(火) 01:57:57
ふっ、俺の手にかかればそんな問題しゅんさつだぜ
0511デフォルトの名無しさん2006/04/18(火) 03:43:53
>>506
ちょっとは自分で調べてから聞けよ。
0512デフォルトの名無しさん2006/04/18(火) 10:33:30
宿題は宿題スレでやって欲しいなあ
教えたことができるようになってんのはあたりまえだろ
教えてない部分はまともな本で読んで補え
って意味の課題なのわかんないのかね
0513デフォルトの名無しさん2006/04/19(水) 00:22:06
ヒント:ゆとり世代
0514デフォルトの名無しさん2006/04/20(木) 06:49:07
規格では、組み込み型の整数のサイズは、何も決められていないのでしょうか。
char <= short <= int <= long
であれば、いいのでしょうか?

すると、これも規格上いいのでしょうか?
char <= short <= int <= long = 1
0515デフォルトの名無しさん2006/04/20(木) 07:02:01
6.3.1 Arithmetic operands
6.3.1.1 Boolean, characters, and integers
1 Every integer type has an integer conversion rank defined as follows:
. No two signed integer types shall have the same rank, even if they hav e the same
representation.
. The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
. The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.
. The rank of any unsigned integer type shall equal the rank of the corresponding
signed integer type, if any.
. The rank of any standard integer type shall be greater than the rank of any extended
integer type with the same width.
. The rank of char shall equal the rank of signed char and unsigned char.
. The rank of _Bool shall be less than the rank of all other standard integer types.
. The rank of any enumerated type shall equal the rank of the compatible integer type
(see 6.7.2.2).
. The rank of any extended signed integer type relative to another extended signed
integer type with the same precision is implementation-defined, but still subject to the
other rules for determining the integer conversion rank.
. For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has
greater rank than T3, then T1 has greater rank than T3.
0516デフォルトの名無しさん2006/04/20(木) 07:03:10
じゃなかったごめん。これは型変換だ。吊ってくる
0517デフォルトの名無しさん2006/04/20(木) 07:13:40
>514
手元のK&R C第2版には

>ハードウェアに合わせて、適当なサイズを自由に選んでよいが、守るべき唯一の条件は、
>shortとintは少なくとも16ビット、longは少なくとも32ビット、shortはintより長くてはならず、
>intはlongより長くてはいけないということである。

「唯一」のくせにいくつか書かれているが、こういうことらしい。
C99でどうなってるかは知らん。
あと、charは1バイト(バイトが何ビットであるかも正確には機種依存ではあるが)。
0518デフォルトの名無しさん2006/04/20(木) 07:22:34
>>517
C99の規格票を眺めていると、引用すべき箇所が多くて貼らない方が
いいだろうが、long long int と unsigned long long intが増えただけで、
後は limits.h内の***_MIN〜***_MAXを少なくとも保持できる大きさ
でなければならない、と書いてある。基本的にはANSI-C89と同じようだ。
0519デフォルトの名無しさん2006/04/20(木) 07:29:39
>>517
ありがとうございます。

C99にint32_tなどがあるのは知っていたのですが、
ANSI Cなどは、何の規定もないのかと疑問に思ったもので。

boostに、SFINAEとsizeofのトリックを利用するため、char型と違うサイズの型を指定するのに、
こんな風なコードが書いてあったので。

typedef char yes_type;
struct no_type
{
char padding[8];
};

K&Rを読んでおくべきでした。
わざわざすみません。
0520デフォルトの名無しさん2006/04/20(木) 19:18:25
int hoge(char *file, int flag, const char *format,...)

こんなソースを見たのですが、
この三連ピリオドはなんですか?
初めてみたんですが、意味を教えてください。
0521デフォルトの名無しさん2006/04/20(木) 19:26:31
可変長引数
0522デフォルトの名無しさん2006/04/20(木) 19:27:33
>>520
see stdio.h.
0523デフォルトの名無しさん2006/04/20(木) 19:27:50
>>521
あった。サンクス。
0524デフォルトの名無しさん2006/04/20(木) 19:28:24
>>522
サンクス
0525デフォルトの名無しさん2006/04/21(金) 16:29:10
typedef enum {
err1 = 0x1,
err2 = 0x2,
...
} HOGE;

として

HOGE a;
a |= e1;

というのをCではよく使ってたんだけど
C++でコンパイルすると
|=のところで演算子定義エラーになるんですが、
C++のenumでは代入しかつかえないんですか?
またenumを再定義してビット演算も使えるように
することってできますか?
0526デフォルトの名無しさん2006/04/21(金) 16:45:50
C++で、互いが互いを参照するようなクラスがあるのですが、
これを2つのヘッダファイルに分け、互いにインクルードするようにすると、
#ifndef #defineを使って多重インクルードを防止した場合は片方がインクルードされず、
これを使用しなかった場合は多重インクルードのループが発生してしまいます。
片方のヘッダのインクルード行の前に、クラスの仮宣言(?)を置くか、
2つのクラスをひとつのヘッダにまとめる事で解決できるのですが、好ましくない気がします。
ほかに効果的な解決方法はありませんでしょうか。

現在の状況:ほかのソースにc_dmanager.hをインクルードして使用
c_dmanager.h
#ifndef __C_DMANAGER_H__
#define __C_DMANAGER_H__
//ここに class C_DManager; と記述する事で、エラーは回避できる
#include "c_data.h"
class C_DManager{/*内部略*/};//このクラス内部でC_Dataにアクセス
#endif

c_data.h
#ifndef __C_DATA_H__
#define __C_DATA_H__
#include "c_dmanager.h"
class C_Data{/*内部略*/};//このクラスからC_DManagerにアクセス
#endif
0527デフォルトの名無しさん2006/04/21(金) 16:54:12
そこのエロイ人にききたいのだけども。
C++.NETとC++2005の主な違いはなんですか?
C言語で書かれたAPIのコードをコピーしても
C++2005で動作するもんでしょうか?
C++2005にはspy++は付属していますか?
よろしくお願いします。
0528デフォルトの名無しさん2006/04/21(金) 16:55:30
>>526
----- A.h -----
#ifndef __A_H__
#define __A_H__
class B;
class A {

};
#endif

----- B.h -----
#ifndef __B_H__
#define __B_H__
class A;
class B {

};
#endif

----- A.cpp -----
#include "A.h"
#include "B.h"

----- B.cpp -----
#include "B.h"
#include "A.h"

0529デフォルトの名無しさん2006/04/21(金) 17:00:38
>C++.NETとC++2005の主な違いはなんですか?
C++.netのはC++ Managed拡張
C++2005はC++/CLI(ECMA-372)

>C言語で書かれたAPIのコードをコピーしても
>C++2005で動作するもんでしょうか?
基本的には動く。とゆうか動かなきゃ話にならん

>C++2005にはspy++は付属していますか?
付いてなきゃ話にry
0530デフォルトの名無しさん2006/04/21(金) 17:29:51
>>529
教えてくれてどうもサンクスです♪
05315262006/04/21(金) 17:34:04
>>528
早レスありがとうございます。
規模の小さいクラスだったので、ヘッダで完結させていたのですが、
CPP側に処理を書いたほうがスッキリしそうなので試してみます。
0532デフォルトの名無しさん2006/04/21(金) 17:44:25
>>525
C(gcc 3.3.5)でもそれ通んないんだけど...

bitsetと組み合わせて以下のようなのはどう?
#include <iostream>
#include <bitset>
using namespace std;
namespace HOGE {enum {err1, err2, size};}
typedef bitset <HOGE::size> HOGE_SET;
int main ()
{
using namespace HOGE;
HOGE_SET a;
a.set (err1);
if (a.test (err1)) cout << "err1" << endl;
return 0;
}
0533デフォルトの名無しさん2006/04/21(金) 17:49:47
つーか、enumをビット演算しようという時点で間違いだ罠。
0534デフォルトの名無しさん2006/04/21(金) 19:03:07
>>525
「列挙」型
0535デフォルトの名無しさん2006/04/21(金) 19:05:03
pascalの列挙型がこんな感じで使えるとか
昔他スレで教えてもらった
0536デフォルトの名無しさん2006/04/21(金) 21:33:39
>>525
列挙型は整数型とは違うからそのままでは |= 演算子を使えない。
そもそも列挙型に対する | 演算子も整数型に格上げして演算されているので要注意。

だから自分で|演算子や|=演算子を定義すればよい。
inline HOGE operator |(HOGE l, HOGE r) throw()
{
    return static_cast<HOGE>(l | r);
}

inline HOGE& operator |=(HOGE& l, HOGE r) throw()
{
    l = l | r;
    return l;
}
05375252006/04/22(土) 01:28:13
みなさんレスありがとうございます。

>> 532
gcc 3.3.2では通ってました。ターゲットはarm-elfでしたけど、関係ないですよね…
今cygwinのgcc 3.4.4で試してみても通りました。

# ADSではtemplateつかえないみたいです…orz

>> 533, 525
普段はADSというarmの純正開発環境を使っていてarmのデバッガだと
HOGE a = err1;
a |= err2;
とかで
err1 | err2
と識別子情報を拾って表示してくれて見やすいので多用してました。
gdbだと拾ってくれないみたいですね。

Cでenumはintで実装されると思ってたんですけど
実装依存なんですかね?
規格とか持ってないんで判んないんですけど。

>> 536
// return static_cast<HOGE>(l | r); // コンパイル通らなかった
// return static_cast<HOGE>(static_cast<int>l | static_cast<int>r); // コンパイル通らなかった
return static_cast<HOGE>((int)l | (int)r);

なぜか↑のようにしないとコンパイル通りませんでしたけど、これでいけそうです。
enum自身にも演算子再定義できるとは知りませんでした。
0538デフォルトの名無しさん2006/04/22(土) 01:40:58
>>537
intでなくてenumを使ってるのはなぜですか?
05395252006/04/22(土) 01:43:43
>>538
> 普段はADSというarmの純正開発環境を使っていてarmのデバッガだと
> 識別子情報を拾って表示してくれて見やすいので多用してました。
という理由です。
0540デフォルトの名無しさん2006/04/22(土) 01:54:11
>539
const int ONE = 1;

という風に代替するんじゃダメなん?
05415402006/04/22(土) 01:55:44
あ、すまん537見落としてたんでスルーしてくれ。
0542デフォルトの名無しさん2006/04/22(土) 03:00:38
VC++2005の本が異様すくないのはなぜですか?
0543デフォルトの名無しさん2006/04/22(土) 03:06:48
製品版が発売されてからまだ間もないからです
続々と新刊が発売されている最中です
0544デフォルトの名無しさん2006/04/22(土) 03:09:39
 もう結構たってません2005年から?
0545デフォルトの名無しさん2006/04/22(土) 03:14:02
C99についての本も異様に少ないはずです
1999年から結構経っていますがそんなもんです
0546デフォルトの名無しさん2006/04/22(土) 03:54:04
>>545
それ以前にC99に完全準拠したまともな処理系は数えるしかなく、
メジャーなベンダーメーカーはC99を捨てているのが現状です。

規格だけが先走り、現物が出てこない悲運のC99。
0547デフォルトの名無しさん2006/04/22(土) 04:15:16
>>537
> static_cast<HOGE>(l | r)

l, r が両方 enum HOGE だとして、これはコンパイルできないとおかしいぞ。
エラーメッセージなんて言われた?

> static_cast<HOGE>(static_cast<int>l | static_cast<int>r)

こっちは
 static_cast<HOGE>(static_cast<int>(l) | static_cast<int>(r))
これで通るはず 〜_cast<T> には括弧が必須。
05485252006/04/22(土) 08:09:23
>> 547
> これで通るはず 〜_cast<T> には括弧が必須。
これでいけました。

> エラーメッセージなんて言われた?
すいません、これに関しては実行時のエラーでした。
↓こんなかんじ

GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
...
(gdb) br main
Breakpoint 1 at 0x401075: file enumtest.cpp, line 23.
(gdb) run
Starting program: /cygdrive/c/nogu/test/enumtest.exe

Breakpoint 1, main () at enumtest.cpp:23
23 {
(gdb) n
24 HOGE a = err1;
(gdb) n
25 HOGE b = err2;
(gdb) n
26 a |= err2;
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x004013fb in operator| (l=err1, r=err2) at enumtest.cpp:11
11 return static_cast<HOGE>(l | r); // SIGSEGV
(gdb)
0549デフォルトの名無しさん2006/04/22(土) 08:14:02
>>546
Sunはメジャーじゃないの?
0550デフォルトの名無しさん2006/04/22(土) 09:11:42
ボーランドのコンパイラがインストールされているのですが、

Z:\MyDocuments>bcc32 teat01.c
'bcc32' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出てコンパイルできません。どうしたらよいでしょうか?
0551デフォルトの名無しさん2006/04/22(土) 09:16:33
>>550
インストールした香具師に聞け。
それがあんた自身なら、ダウンロードした香具師に聞け。
それがあんた自身なら、ダウンロードしたサイト周辺を探せ。
0552デフォルトの名無しさん2006/04/22(土) 09:24:17
bcc path で ググって「pathを通す」という概念を理解しよう
05535502006/04/22(土) 09:32:26
>>551-552
環境変数を自分で設定しないといけないんですね。
愛媛大学のメディアセンターのパソコンは今日開いていないので、
月曜日にやってみます。
0554デフォルトの名無しさん2006/04/22(土) 09:42:11
何故愛媛を強調
0555デフォルトの名無しさん2006/04/22(土) 12:03:30
2000ByteのI:\file.binの0x1500-0x1510までのアドレスに00 01 02 03 04 05 06 07 08 09を出力したいのですが
どの様に実装すればいいのでしょうか
0556デフォルトの名無しさん2006/04/22(土) 13:12:54
>>555
つ[fopen(), fseek(), fwrite(), fclose()]
0557デフォルトの名無しさん2006/04/22(土) 13:29:12
0x1500って5376バイト目なわけだが
0558デフォルトの名無しさん2006/04/22(土) 13:30:24
別に問題なくね?
0559デフォルトの名無しさん2006/04/22(土) 14:01:10
すみません、constと#defineとenumについてお聞きします。

普遍の値として10という数字を使う際に
constと#defineとenumのメリットデメリットや使い方例などありますか?

0560デフォルトの名無しさん2006/04/22(土) 14:06:51
#define FUHEN (10)
const int fuhen = 10;
enum {Fuhen = 10};

それが個数などを表す数値であるなら意味的には整数型を使うべき。
序列、番号付けの目的ならenumがいいだろう。
どちらの手段も使えないなら仕方なくマクロにしようか。
0561デフォルトの名無しさん2006/04/22(土) 14:08:39
自分はenumを進める
言語で標準サポートされてるし
0562デフォルトの名無しさん2006/04/22(土) 15:07:38
>>561
いや、マクロやconstもサポートされていますが何か。
0563デフォルトの名無しさん2006/04/22(土) 15:26:17
defineはプリプロセッサ
constはわざわざ使う必要は無いと思った
0564デフォルトの名無しさん2006/04/22(土) 15:36:07
>>563
浮動小数点型の定数が欲しい時どうするんだ?
整数型の定数だけenumにして、その他はdefineかconstなんていう不統一なスタイルにするのか?
0565デフォルトの名無しさん2006/04/22(土) 15:41:46
きっと浮動小数点数を暗算で16進数に変換できる人なんだよ。
0566デフォルトの名無しさん2006/04/22(土) 15:47:40
つーかむしろenumは特定の数値を表すものとしては使うべきではないと思うが。
0567デフォルトの名無しさん2006/04/22(土) 15:53:58
>>566
使うべきかどうかは別として、最初に導入された理由が
「マクロよりもマシな記号定数が必要だったから」だしな。
使い方として完全に間違っているわけではないかと。
0568デフォルトの名無しさん2006/04/22(土) 16:10:51
cout <<
printf
後者の方が10倍くらい出力速い気がする
0569デフォルトの名無しさん2006/04/22(土) 16:19:01
>>568
Cの方が速いのは当たり前
0570デフォルトの名無しさん2006/04/22(土) 16:30:17
速度が気になるほどprintfしまくったらえらいことになるし
0571デフォルトの名無しさん2006/04/22(土) 16:34:06
俺の心にprintfしてください
0572デフォルトの名無しさん2006/04/22(土) 16:34:20
C++2005にwebフォームは作れないって書いてあったけど。
webフォームとwebアプリケーションは違いますよね?
webフォームとは具体的になんですか?
0573デフォルトの名無しさん2006/04/22(土) 16:52:28
talk_something > /dev/null

独り言
0574デフォルトの名無しさん2006/04/22(土) 19:01:13
GCCでプログラミングをしていて、壁に当たりました。
なんとか、getch()を使える環境にしたのですが、うまくいきません。
コンパイルは普通に通り、実行ファイルも吐き出されます。
しかし、実行時にセグメンテーション違反が出ます。
どうすればいいでしょうか。
ご教授いただければうれしいです。
0575デフォルトの名無しさん2006/04/22(土) 19:21:47
>>574
getchar使うとか
0576デフォルトの名無しさん2006/04/22(土) 19:23:52
>>575
はい、そうするのが無難なのですが。
例えば、タイピングのゲームを作りたいと考えた時に、getcharでは実現できないと思うのです。
0577デフォルトの名無しさん2006/04/22(土) 19:25:32
ご教授いた〜って言う奴に何故かいらいらくる
普通に教えて下さい程度で十分だと思う
ここは教授するような高尚な知識を授ける程のレベルのスレでもない
0578デフォルトの名無しさん2006/04/22(土) 19:29:43
>>577
なら来るなよカス。
0579デフォルトの名無しさん2006/04/22(土) 19:31:51
>576
curses使えばリアルタイムに取れる
0580デフォルトの名無しさん2006/04/22(土) 19:34:42
>>579
レスありがとうございます。
よければそれについて、詳しく教えてください。
有用な情報が載っているWebページなどでも結構です。
0581デフォルトの名無しさん2006/04/22(土) 19:38:54
>>577
元々「教授する」なんて言葉自体が誤用なんだから目鯨立てなさんな。
0582デフォルトの名無しさん2006/04/22(土) 19:40:00
>580
man 3 curses

ttp://www.h7.dion.ne.jp/~matsu/feature/c-language/curses/basic.html
↑にサンプルコードやらなんやら
足りんかったら適当にぐぐれ
0583デフォルトの名無しさん2006/04/22(土) 19:43:20
initscr
してないとか
0584デフォルトの名無しさん2006/04/22(土) 19:43:30
>>580
ぐぐれ。そして挫折しろ。
05855772006/04/22(土) 20:13:33
>>578
おならプー
0586デフォルトの名無しさん2006/04/22(土) 20:52:12
ところで、正しい日本語は

     「教示」

です。
0587デフォルトの名無しさん2006/04/22(土) 20:56:35
三省堂提供「大辞林 第二版」より
きょうじゅ【教授】

(名)スル
児童・生徒に知識・技能を与え、そこからさらに知識への興味を呼び起こすこと。
専門的な学問・技芸を教えること。
「国文学を―する」「書道―」
0588デフォルトの名無しさん2006/04/22(土) 20:58:19
三省堂提供「大辞林 第二版」より
きょうじ 【教示】

(名)スル
〔「きょうし」とも〕おしえしめすこと。示教。
「御―を賜りたく」
実験・調査で、研究者の意図する行動を被験者にとらせるための指示
0589デフォルトの名無しさん2006/04/22(土) 20:59:48
どっちかってーと、間違ってないか > 教示
0590デフォルトの名無しさん2006/04/22(土) 21:18:18
この場合は教授で正解だな。
0591デフォルトの名無しさん2006/04/22(土) 23:09:11
はい! わかりましたそこの教授!
0592デフォルトの名無しさん 2006/04/22(土) 23:52:19
このよく見るgetch()って関数は何?
putch()ってのもあるの?
GCC特有の関数?
0593デフォルトの名無しさん2006/04/22(土) 23:59:38
conio.hに定義されている標準入力から一文字読み込む関数
ヘッダファイルの名のとおりコンソール専用
0594デフォルトの名無しさん2006/04/23(日) 02:21:49
超初心者の質問でスマ。
borland C++を導入して
BinにPATHを通しても
includeとlibを読み込んで
くれません。
こんなことで悩んでいるぽっくんは
バカ?
なんせプログラム組むのは
10年ぶりでWindowsは初めてなもので。
教えて偉い人。

0595デフォルトの名無しさん2006/04/23(日) 02:24:46
INCLUDEとLIBにも通せばいいんじゃないか?
0596デフォルトの名無しさん2006/04/23(日) 02:28:35
setbccでぐぐると幸せになれるかも。なれないかも。
0597デフォルトの名無しさん2006/04/23(日) 02:28:39
下手な釣りだな。
0598デフォルトの名無しさん2006/04/23(日) 02:34:25
INCLUDEとLIBにも
PATH通したんですけど、
ダメなんですよーーー(;_;
0599デフォルトの名無しさん2006/04/23(日) 02:36:02
ちゃんと
bcc32.cfgとilink32.cfgファイルは
作りました。
どうやらそれを無視している
ようです。
0600デフォルトの名無しさん2006/04/23(日) 02:46:20
setbccを使うと良いらしいんですけど、
なんでダウンロード出来ない神!
0601デフォルトの名無しさん2006/04/23(日) 03:16:53
GCCのライブラリにisleadbyte()ってありましたっけ?
0602デフォルトの名無しさん2006/04/23(日) 03:20:14
>>594
CPadっていうフリーのIDEだと環境変数自動で設定してくれる。
それだと駄目か?
0603デフォルトの名無しさん2006/04/23(日) 03:36:38
>>601
あるよ。
0604デフォルトの名無しさん2006/04/23(日) 03:40:11
bcc.exeを削除したら、立ち上がらなくなりました。なぜでしょうか?
どうしてもわかりません?????
0605デフォルトの名無しさん2006/04/23(日) 04:19:31
ども>>594です
どうやらTeraPadの保存で
余計な拡張子がついていたようです
無事コンパイル出来ました。
お騒がせしました。
0606デフォルトの名無しさん2006/04/23(日) 05:48:18
すみません>>594です。
こんどはリンカで
Illegal option -Gn
とかでてEXEファイルを生成
出来ない様です。
こまりました。
0607デフォルトの名無しさん2006/04/23(日) 08:25:35
>>606
翻訳サイトにその文章をかけてみな。たぶん正しくないオプション-Gnみたいな文章になると思うから。
ilink32.cfgに-Gnって書いてあったら消すといいと思うよ。
0608デフォルトの名無しさん2006/04/23(日) 09:20:17
エラーメッセージくらい嫁よ
0609デフォルトの名無しさん2006/04/23(日) 09:56:15
>>603
何ていうヘッダで定義されてますか?
BCCに通るコードでも未定義エラーで弾かれちまいます。
0610デフォルトの名無しさん2006/04/23(日) 10:03:38
>>609
自分の環境だとmingwのctype.hとwctype.hにしかないな。
0611デフォルトの名無しさん2006/04/23(日) 10:07:12
isleadbyte って ISO で定義されてる?
手持ちの資料では見当たらないんだが。
0612デフォルトの名無しさん2006/04/23(日) 11:04:09
>>609
mingwのctype.h
0613デフォルトの名無しさん2006/04/23(日) 12:31:32
>>607
ilink32.cfgで、-Gの指定がありません。
なぜ-Gのエラーが出るのか判りません。。
0614デフォルトの名無しさん2006/04/23(日) 12:36:52
>>613です。
とりあえずEXEファイルは生成出来ました。
しかし実行すると、有効なwin32アプリケーション
ではありません。と出てエラーになってしまいます。
ただhello worldと出すだけのプログラムなんですけど。
0615デフォルトの名無しさん2006/04/23(日) 12:45:03
>>614
いい加減に汁。
コンパイラ/リンカの使い方位ググって調べろ。

ここは、ソフトの使い方を聞くスレじゃねぇ!
0616デフォルトの名無しさん2006/04/23(日) 13:13:55
どうもすみません。
0617デフォルトの名無しさん2006/04/23(日) 13:55:00
setbccはどう?
0618デフォルトの名無しさん2006/04/23(日) 14:40:57
>>610 >>612
ctype.hをインクルードしてますが、「isleadbyteへの参照が未定義」とエラーされました。意味がさっぱりっす。環境はcygwin。
引値はintらしいけど、BCCだとcharが通りました。これも訳わからんです。
0619デフォルトの名無しさん2006/04/23(日) 14:44:41
ヘッダファイル
と
リンクするライブラリ
があっているか?
0620デフォルトの名無しさん2006/04/23(日) 14:50:32
>>618
cygwin でエラーメッセージに日本語でるの?
0621デフォルトの名無しさん2006/04/23(日) 15:14:04
>>620
いや、英語でした。
リンカも1 exit statusなるものを返してきてるらしいですが…。

>>619
<ctype.h>じゃ駄目ですか?
0622デフォルトの名無しさん2006/04/23(日) 15:31:51
>>621
やったこととエラーメッセージを「正確に」伝えろバカ。
0623デフォルトの名無しさん2006/04/23(日) 15:33:29
>>621
終了ステータスが0以外=何かエラーが発生した


つーかこんなのC言語以前のレベルだろうが、氏ね
0624デフォルトの名無しさん2006/04/23(日) 16:49:41
じゃいいや
BCCでします。
0625デフォルトの名無しさん2006/04/23(日) 17:08:36
Blind Carbon Copy
0626デフォルトの名無しさん2006/04/23(日) 17:16:32
Coconut Boys
0627デフォルトの名無しさん2006/04/23(日) 20:18:54
>>621
わざわざmingwだと言ってるのに。頭悪杉。
0628デフォルトの名無しさん2006/04/23(日) 22:49:05
代入演算子は継承されないってことらしいですが、
試しに基底クラスで代入演算子をオーバーロードして、
その基底クラスから派生させたクラスを1つつくって
派生クラス同士で代入を行ったら、基底クラスでオーバーロードした
代入演算子が呼び出されているようなんですが・・・
これって継承されてるのと違うんですか?それとも意味が違う?
0629デフォルトの名無しさん2006/04/24(月) 00:11:46
>>628
>13.5.3 代入
>代入演算子は,1個の仮引数をもつ非静的メンバ関数として実装しなければならない。代入演算子が
>利用者によって宣言されていない(12.8参照)場合,コピー代入演算子operator=が,クラスごとに暗黙に宣言さ
>れるので,基底クラスの代入演算子は,常に派生クラスのコピー代入演算子によって隠ぺいされる。
06306282006/04/25(火) 02:25:17
class A{
public:
A& operator =(const A& rhs){ cout << "A" << endl; return *this; }
};

class B : public A{

};

int main( void )
{
class B b1, b2;

b1 = b2;
}

これを実行すると
A
と表示されるのですが・・・おかしいですよね?
0631デフォルトの名無しさん2006/04/25(火) 03:05:41
>>630
「継承されません」というのは、派生クラスで自前で代入演算子を定義
した時、基底クラスの代入演算子が無視されてしまう事を言う。

今のケースではBのデフォルトの代入演算子が使われるので、継承とか
は関係無しに基底クラスの代入演算子も呼ばれる。

試しにBに代入演算子を定義してみな。自分でA::operator=()を呼び
出さないと呼び出されない。隠蔽されてしまうからだ。

規格のどの辺かな?§12.8、§13.5.3あたりだと思うんだが。
0632デフォルトの名無しさん2006/04/25(火) 08:24:31
>>629
その定義だと、全てのメンバ関数にあてはまってしまわない?
0633デフォルトの名無しさん2006/04/25(火) 09:18:53
>>630
暗黙に定義される B::operator=() は A::operator=() を呼び出す。
そうじゃないと困るだろ?べつにおかしくない。
0634デフォルトの名無しさん2006/04/25(火) 09:19:57
>>632
代入演算子は暗黙の宣言があるので必ず隠される。
他のメンバ関数はそうはならない。
0635デフォルトの名無しさん2006/04/25(火) 09:29:27
つまりこういう事か。

暗黙に定義されるB::operator=()は、Bに固有のメンバのみビットコピーした
後にA::operator=()を呼び出す、と。

確かにそういうバイナリ吐いてるな。
0636デフォルトの名無しさん2006/04/25(火) 09:48:06
>>635
ビットコピーではなく代入だよ。
0637デフォルトの名無しさん2006/04/25(火) 09:54:08
>>635
違う。

B のメンバはそれぞれに対して代入を行う( operator=() を呼び出す)。
また、順番は A::operator=() が最初でメンバは宣言順になる。
0638デフォルトの名無しさん2006/04/25(火) 09:55:58
難しひ・・・・
0639デフォルトの名無しさん2006/04/25(火) 10:03:04
そうか?単純にメンバに再帰してるだけで、自然だと思うけど。
0640デフォルトの名無しさん2006/04/25(火) 10:09:54
shallow copy と deep copy で言うと、shallow copyの方がデフォルトの
代入演算子の動作だったような・・・・
0641デフォルトの名無しさん2006/04/25(火) 10:09:56
Cの構造体のコピーと事情は一緒だと思うが。
・メンバを先頭から順番に代入する。
・継承している場合は継承元が先。
たったこれだけだろ。
0642デフォルトの名無しさん2006/04/25(火) 10:13:39
>>635,640
自信が無いなら規格読めよ。
0643デフォルトの名無しさん2006/04/25(火) 10:19:24
Bの内容が

class B : public A {
 int* i;
};

のような状態で、iがnewされた領域を指していた場合、デフォルトの
B::operator=()じゃダメだろ。
0644デフォルトの名無しさん2006/04/25(火) 10:30:53
>>643
大抵ダメだろうねぇ。そのような場合、適切な代入オペレータを用意するのはクラス設計者の責任だろうけど。
0645デフォルトの名無しさん2006/04/28(金) 12:45:44
質問です。

可能な限り高速に、エクセル形式のファイルを動的配列に格納したいです。
調べたところ、ODBCというものを使う、という手段を発見しましたが、下記サイトによるとタイムラグが発生するとのこと。
他に手段はありますか?

ttp://sato-si.at.webry.info/200503/article_11.html
06466452006/04/28(金) 12:51:35
age忘れ。
失礼しました。
06476452006/04/28(金) 12:54:21
環境忘れ。失礼しました。

環境 : VC.NET2003, WinXP SP2, 標準STL
0648デフォルトの名無しさん2006/04/28(金) 12:55:19
>>645
自前でフォーマットを調べて読み込みルーチンを書く

ttp://www.wotsit.org/download.asp?f=excel
0649デフォルトの名無しさん2006/04/28(金) 14:42:40
wcharをfputsで出力すると、勝手に改行が付いてきます。
wcharをfputsで出力するのはダメなんでしょうか?

環境はWinCE5.0です。
0650デフォルトの名無しさん2006/04/28(金) 14:46:13
>>649
fputws
0651デフォルトの名無しさん2006/04/28(金) 17:05:43
>>650
あああ!ありがとうございます。そんなものがあるなんて思ってませんでした。
0652デフォルトの名無しさん2006/04/28(金) 22:52:53
エクセルのファイルフォーマットは公表されてないでしょ。
マイクロソフトの気分しだいで簡単に変更されちゃうのでは?
0653デフォルトの名無しさん2006/04/28(金) 22:57:58
変更されたら自作ライブラリも更新すればよかろう。
0654デフォルトの名無しさん2006/04/28(金) 22:58:23
openofficeの資料みれば poifsとか
次はxmlベースらしいから解析は楽そうだけど
0655ふーん2006/04/28(金) 23:05:45
 
【IT/政治】日本政府、「世界最高水準のセキュリティー」の次世代OS開発着手へ
:Winny被害に対応[06/04/29]
http://news19.2ch.net/test/read.cgi/newsplus/1146231538/l50
06566452006/04/29(土) 03:49:52
odbc以外は難しそうですね。
ありがとうございました。
0657デフォルトの名無しさん2006/04/29(土) 08:48:27
エクセルファイルを読みたいだけならExcelのオートメーションでもできた気がする。
0658デフォルトの名無しさん2006/04/29(土) 10:02:41
オートメーションもアウトプロセスCOMだから遅いお。
0659デフォルトの名無しさん2006/04/29(土) 10:46:08
クラスのメンバ関数をinlineにする場合で、関数定義をクラスボディの外で
する場合、宣言と定義にinline指定、宣言のみにinline指定、定義のみに
inline指定、いずれもinlineになると思っていいの?
0660デフォルトの名無しさん2006/04/29(土) 11:26:59
>>659
いいけど、定義だけにつけたときは
使う側が定義を取り込むように注意して配置しろよ。
0661デフォルトの名無しさん2006/04/29(土) 17:07:15
逆にいえば、余計なことを考えずに宣言につけとけって話だな。
0662デフォルトの名無しさん2006/04/29(土) 17:51:45
他の翻訳単位にあっても、コードがinlineに展開される事ってあるの?
0663デフォルトの名無しさん2006/04/29(土) 17:55:17
ない
0664デフォルトの名無しさん2006/04/29(土) 18:56:17
コンパイラとリンカによる。
たとえばVC++にはプログラム全体の最適化というリンク時に行う最適化がある。
それどころかDLL内の関数すらインライン展開する機能もある
0665デフォルトの名無しさん2006/04/29(土) 23:12:01
構造体の配列は宣言した段階で領域が確保されるの?
0666デフォルトの名無しさん2006/04/29(土) 23:32:11
いいえ
0667デフォルトの名無しさん2006/04/29(土) 23:37:42
動画編集に手を出したいんだが
お勧めのライブラリってある?
検索の仕方が悪いのかいまいちヒットしない。
0668デフォルトの名無しさん2006/04/29(土) 23:46:41
やってみたけど、構造体自体もできてない。
構造体の中身の配列に関しては、値を入れた配列要素から
1つづつ形成されていた。
配列オンリーなら宣言時というよりも、すでにstatic領域(静的領域)でできてるけど。
0669デフォルトの名無しさん2006/04/30(日) 12:18:23
>>668
どうやって調べてるの
0670デフォルトの名無しさん2006/04/30(日) 12:23:37
>>668
>構造体の中身の配列に関しては、値を入れた配列要素から
>1つづつ形成されていた。
どういう意味?構造体の配列にvectorでも使っているの?
0671デフォルトの名無しさん2006/04/30(日) 18:16:26
>>669-670
>>668誤り
構造体自体もアドレス確保されてるし、構造体の中に配列作ったとしても、
その配列も他変数同様確保されてるし、
static領域ではないし、
ただ、Cでやったんだけど、
Cの場合、C++と違って、「宣言は最初に持ってこないといけない(関数内の中間じゃ×)」
であって、例えば、
int a=1;
int b=2;
とやるも、先にaとbがまとめて確保されて、次にa=1となり次にb=2となる。
ここを誤った。
0672デフォルトの名無しさん2006/04/30(日) 18:22:29
結局、宣言時に全部確保されてた。
0673デフォルトの名無しさん2006/04/30(日) 18:58:31
>>671
新しい規格ではブロックの先頭じゃなくてもいいんじゃなかったっけ?
0674デフォルトの名無しさん2006/04/30(日) 19:01:56
「宣言」「定義」「確保」の意味が曖昧で話がわからん。
0675デフォルトの名無しさん2006/04/30(日) 19:05:55
正確に言うなら
int a=1;
は定義である
これが関数内に記述されているなら関数が実行されるときに
スタック上に領域が確保される かもしれない
0676デフォルトの名無しさん2006/04/30(日) 19:07:43
宣言と定義ぐらいは規格上の意味に則ってほしいなぁ。
0677デフォルトの名無しさん2006/04/30(日) 19:14:26
#include <iostream>
using namespace std;
char a[255];
void set(){
a="abc";
}
void main()
{
set();
cout <<a;

getchar();
}

どうすればいいんだYO
0678デフォルトの名無しさん2006/04/30(日) 19:18:17
無理せずstringつかっとけ
0679デフォルトの名無しさん2006/04/30(日) 19:20:24
普通ならその前にポインタや配列とかを勉強させるべきじゃね?
ここで教えるわけがないけど、まあ、そのへん勉強しろと
0680デフォルトの名無しさん2006/04/30(日) 19:24:26
#include<iostream>
usingnamespacestd;
chara[255];
voidset(){
//a="abc";
if(strlen(a)>strlen("abc"))
strcpy(a,"abc");
}
void main()
{
set();
cout<<a;

getchar();
}
0681デフォルトの名無しさん2006/04/30(日) 19:28:42
>>680
ありがとう

ポインタを使う時はどうするの?
0682デフォルトの名無しさん2006/04/30(日) 19:30:00
>>681
聞く前に自分で書け馬鹿。
0683デフォルトの名無しさん2006/04/30(日) 19:41:30
>>682
馬鹿って言う奴が馬鹿なんだもんねー
0684デフォルトの名無しさん2006/04/30(日) 20:05:55
#include<iostream>
usingnamespacestd;
//chara[255];
staticchar*a="efg";
voidset(){
//a="abc";
if(strlen(a)>strlen("abc"))
strcpy(a,"abc");
}
void main()
{
set();
cout<<a;

getchar();
}

char*a;やchar*a="efg"だと、
strcpy(a,"abc");
とした瞬間に、元のaの値もアドレスもゴミとして放棄して、新しくアドレス確保してabc\0を入れてしまうんだよ。
で、ゴミがエラーとして出る。
こういう面からも安易に=は使えないよ、=はポインタ型変数で使うと参照を意味したりもする(もちろんアドレス変わる)('Д`)
0685デフォルトの名無しさん2006/04/30(日) 20:08:58
Cで使えるXMLパーザってないですかね。
調べてもC++用のしか見つからないんです。
コンパイラはBCCです。
0686デフォルトの名無しさん2006/04/30(日) 20:11:53
>>685
Parsifal XML Parser
0687デフォルトの名無しさん2006/04/30(日) 20:11:55
DOMはCでも使えるよ
0688デフォルトの名無しさん2006/04/30(日) 20:14:04
>>684
どうもご親切に
0689デフォルトの名無しさん2006/04/30(日) 20:24:03
>>684
> char*a;やchar*a="efg"だと、
> strcpy(a,"abc");
> とした瞬間に、元のaの値もアドレスもゴミとして放棄して、新しくアドレス確保してabc\0を入れてしまうんだよ。
新しくアドレスを確保?
んなことせんがな
自分でstrcpyと同じ動作をする関数を実装してみると理解が深まると思われ
0690デフォルトの名無しさん2006/04/30(日) 20:37:13
string使ったら全て解決したYO ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
0691デフォルトの名無しさん2006/04/30(日) 20:37:49
>>686
>>687
おお、あった。
速攻レスありがとうございます。
0692デフォルトの名無しさん2006/04/30(日) 22:20:23
char*a;やchar*a="efg"だと、
"abc"を入れるアドレスを作り、"abc"を入れて、
strcpy(a,"abc");で、"abc"のアドレスをaが参照し(aと"abc"は同アドレス)、
aの元の値とアドレスはゴミとして残ってしまう。
でOKですか?
AccessViolationでるから、まんまでは確認できなかったですけれど。
0693デフォルトの名無しさん2006/04/30(日) 22:32:01
>>692
なんだか説明が下手でよく判らんが、理解できてなさそうだとは思う。
コードを提示して説明しなおして味噌。
0694デフォルトの名無しさん2006/04/30(日) 22:47:16
#include <iostream>
using namespace std;
char* b="efg";
void set(){
/*5:*/strcpy(b,"abc");
}

void main()
{
set();
cout<<b;
getchar();
}
ビルドは通りますが、実行時AccessViolationでます。
で、その訳ですが、5行目でabcのためのアドレス確保し、abc\0が入る
&aが"abc"と同アドレスを参照しようとするが、そのとき、efgとそのアドレスを切り離す(メモリ上に残骸が残る)>AccessViolation
0695訂正2006/04/30(日) 22:48:54
>&aが
を
>&bが
0696デフォルトの名無しさん2006/04/30(日) 22:54:15
>>694
違います。
0697デフォルトの名無しさん2006/04/30(日) 22:56:55
>>694
"abc"のための領域なんぞ確保できていない。
char* b = "efg"は文字列リテラルへのポインタをbに代入しているに過ぎない。
で、文字列リテラルはconst、つまり変更不可能。
それをstrcpyで勝手に書き換えようとした。ゆえにAccessViolation
そもそもViolationで辞書引いたのか?
0698デフォルトの名無しさん2006/04/30(日) 23:00:17
解決したのに議論は終わらず
0699デフォルトの名無しさん2006/04/30(日) 23:01:33
どうやら大部分の人々はポインタを理解するための脳の一部分を持たずして生まれてくる ようだ。
07006932006/04/30(日) 23:12:04
うぁはは、本当に理解できていなかったとは。素晴らしい。
0701デフォルトの名無しさん2006/04/30(日) 23:41:29
>>697
ありがとうございます。
追うのはかなり厳しかったのですが、
strcpy内ステップインして、
abcをスタックにpushした後、
〜
この間分からなかったですが、
〜
mov dword ptr [edi],edx
(edx=00636261(\0cba))
で、abc\0をediレジスタに書き込むところでAccessViolation発生していました。
宣言が関数内外問わず同じでした
0702デフォルトの名無しさん2006/04/30(日) 23:43:08
ポインタは、そのポインタ値が何を指しているのか?
が重要であって、それさえイメージ出来れば、
何も難しい事なんて無いはずなのになぁ…。


みんな、想像力が欠けてるのか?
0703デフォルトの名無しさん2006/04/30(日) 23:45:20
「この処理は何をしているのか」
がわかってないといきなりデバッガで追っても意味わからんと思うけど・・
0704デフォルトの名無しさん2006/04/30(日) 23:45:39
>>701
そんなものを追う前に、Access Violation を英和辞書でひけ!
0705デフォルトの名無しさん2006/05/01(月) 00:02:24
「俺に聞けスレ」にも、ポインタが分かってないのに、デバッガの値がどうとか言って
ヒンシュクをかってたやつがいたな。
0706デフォルトの名無しさん2006/05/01(月) 00:12:57
>>705
あの、的はずれな値を見ていた香具師か?
0707デフォルトの名無しさん2006/05/01(月) 00:24:00
>>703
彼らはある日魔法の呪文が書かれた本を目にするとなぜかそれが全て読めて
南無南無唱えて敵を倒せるのだと思い込んでいるからなぁ。
0708デフォルトの名無しさん2006/05/01(月) 00:38:25
>701
そろそろ「釣れたw」とか言って欲しいな。

>mov dword ptr [edi],edx
>(edx=00636261(\0cba))
>で、abc\0をediレジスタに書き込むところで
そのコードはabc\0をediレジスタに書き込んでいるのでは無い。
ediレジスタが指す メ モ リ にedxの内容を書き込んでいる。
0709デフォルトの名無しさん2006/05/01(月) 00:49:33
この世には2種類の人間がいる。

ポインタを理解できる人間か、理解できない人間かだ。
0710デフォルトの名無しさん2006/05/01(月) 11:30:24
>>699
JoS?
0711デフォルトの名無しさん2006/05/01(月) 20:21:56
UNIX系のC言語について質問させてください。
errno==ENTER
ってどういうエラーを表しているのでしょうか?
手持ちの本には何も書いてなくて、検索してもあまりこれっというのがでてきませんでした。
よろしくお願いします。
0712デフォルトの名無しさん2006/05/01(月) 20:22:29
>>711
perror()
strerror()
07137112006/05/01(月) 20:32:48
>>712
すみません、よくわかりません。
もう少しヒントをお願いできないでしょうか?
0714デフォルトの名無しさん2006/05/01(月) 20:38:53
>>713
errno = ENTER;
perror("");
とすると、エラーENTERの説明がstderrに出力されるはず。
0715デフォルトの名無しさん2006/05/01(月) 20:41:50
>713
man errno

しかし、ENTERなんてあったか?
写し間違えてない?
07167112006/05/01(月) 20:47:48
>>714,715
ごめんなさい。EINTRの間違いでした。
おさがわせしました。
0717デフォルトの名無しさん2006/05/01(月) 23:07:01
質問です。 printf関数使って " っていう文字表示させるにはどうしたらよいですか?
printf(""");
とかやったらエラーになるのですが。って当たり前か
0718デフォルトの名無しさん2006/05/01(月) 23:07:49
\"
マニュアルを読むとか検索するとか汁
0719デフォルトの名無しさん2006/05/01(月) 23:41:15
>>718 ご親切にありがとうございます
0720デフォルトの名無しさん2006/05/01(月) 23:49:11
世の中には二種類の人間がいる。
ポインタを理解している人間と理解する気がない人間だ。
理解できないようなのは人間とは認め難い。

つーかネタもいいかげんにしてくれ。
基本的な文字列操作もできないCプログラマがどこにいる。
0721デフォルトの名無しさん2006/05/02(火) 00:19:54
ここに
0722デフォルトの名無しさん2006/05/02(火) 00:21:20
そしてまたここに
0723デフォルトの名無しさん2006/05/02(火) 00:26:52
stringでいいじゃん
0724デフォルトの名無しさん2006/05/02(火) 01:57:27
stringだと、けつに'\0'ないじゃん
0725デフォルトの名無しさん2006/05/02(火) 01:59:28
僕の尻にも'\0'を突っ込まれそうです
0726デフォルトの名無しさん2006/05/02(火) 02:27:42
尻に\0……ネギと卵?
0727デフォルトの名無しさん2006/05/02(火) 02:38:37
>>724
c_str()で
0728デフォルトの名無しさん2006/05/02(火) 10:47:56
DebugとReleaseの違いを教えてください。
0729デフォルトの名無しさん2006/05/02(火) 10:49:02
>>728 デバッグとリリースの違いはわかるか?
0730デフォルトの名無しさん2006/05/02(火) 10:49:42
>>728
VisualStudioの話なら、該当スレへさようなら。
そうでないなら何を知りたいのか具体的にどうぞ。
0731デフォルトの名無しさん2006/05/02(火) 21:59:59
猫でも分かるWindowsを読みながら、Windows上でBCCで作っておりますが、

void sinfunc(double* x)
{
double y;
y=sin(*x);
*x = y*300;
}
という関数を使い、
WM_TIMERとWM_PAINTあたりを弄って、
初期値x=300;などで
この関数に通した後で

hBrush=CreateSolidBrush(RGB
((abs(abs(x-765) - 255) + (-1 * abs(-x + 765)) +255)/2,
(abs(abs(x -255) - 255) + (-1 * abs(-x + 255)) +255)/2,
(abs(abs(x -510) - 255)+ (-1 * abs(-x + 510)) +255)/2));

という関数を用い、正方形が様々な色に変わるプログラムを作ろうと
無謀にも思いついて作っておりますが、早速困っております
07327312006/05/02(火) 22:04:00
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
HDC hdc; PAINTSTRUCT ps; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush;
double x=900;//←これ追加しました

switch(msg)
{
 case WM_CREATE:
 {
  SetTimer(hWnd,IDT_TIMER1,500,NULL);//←これ追加しました
  break;
 }
 case WM_TIMER:
 {
  switch(wp)
 {
  case IDT_TIMER1:
       {
        sinfunc(&x);//←これ追加しましたが、これ1つで良いんですか?
        InvalidateRect(hWnd,NULL,true);
        break;
       }

  }
 }
07337312006/05/02(火) 22:08:45
case WM_PAINT:
{
hdc=BeginPaint(hWnd,&ps);

hPen=CreatePen(PS_SOLID,0,RGB(255,0,0));
hOldPen=(HPEN)SelectObject(hdc,hPen);

hBrush=CreateSolidBrush(RGB((abs(abs(x-765) - 255) + (-1 * abs(-x + 765)) +255)/2,
(abs(abs(x -255) - 255) + (-1 * abs(-x + 255)) +255)/2,
(abs(abs(x -510) - 255)+ (-1 * abs(-x + 510)) +255)/2));

hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
Rectangle(hdc,10,10,100,100);
DeleteObject(hBrush);

SelectObject(hdc,hOldPen);
SelectObject(hdc,hOldBrush);

EndPaint(hWnd,&ps);
break;
}

こんな感じで追加したのですが、1回sinfunc(&x);を呼び出しただけで止まってしまうのか
色が赤から緑に1回変わっただけで終わってしまいます。
#define IDT_TIMER1 100も行頭に追加しているのですが。

このように、他の関数で値を計算してからWM_TIMERに取り出して、その後
WM_PAINTに描画させる時に、>>732のように1回書くだけで良いのでしょうか?
ご指導お願いします
0734デフォルトの名無しさん2006/05/02(火) 22:25:36
もっかいタイマーかければ?
0735デフォルトの名無しさん2006/05/02(火) 22:26:44
WinAPIスレがなかったか?
0736さげ2006/05/02(火) 23:43:42
>初期値x=300;
コールバック来たら、
>double x=900;//
>sinfunc(&x);//
だから、2回目以降はx=900という動作だから、変わらず同じでしょう。
それと、タイマーオブジェクトはいくつも作れるから(タイマーが複数動く状態)、
WM_TIMER:を受けるタイミングがごちゃごちゃになってくるから動かすタイマーはひとつで充分。
07377312006/05/03(水) 00:48:14
>>736さん

double x;
は、最初に宣言するようにして、

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
HDC hdc; PAINTSTRUCT ps; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush;
x=900;

で、
case IDT_TIMER1:
{
 double* px
 sinfunc(&x);//←これ追加しましたが、これ1つで良いんですか?
 InvalidateRect(hWnd,NULL,true);
 px =&x
 x= *ps
 break;
}

と書き直したら、それっぽく動くようにはなりましたが、
これで良いのでしょうか?
07387312006/05/03(水) 00:49:41
>>735氏

>>1に>エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
とありますが、私の質問はこのスレとはやはりずれるのでしょうか?
0739デフォルトの名無しさん2006/05/03(水) 00:52:29
>>735じゃないが、他にもっと適したスレがあるんだからそっちで聞けということだろ
07407312006/05/03(水) 01:14:13
すみません、
x=900;は

case WM_CREATE:
{
・・・・・
x=900;
break;
}
と入れました。>>737の所ではありません。

これで自分が予測していた感じで動くようになりました。
皆さん、有難うございました。
0741デフォルトの名無しさん2006/05/03(水) 01:16:32
>x= *ps
もしかして、ペイント構造体の値が色変わると動くから流用したのかな?
int blinkflag=0;
〜
case WM_PAINT:
if(flickflag==0){
 x=900;
}
else{
 x=300;blickflag=1;
}
以下ペイント

と自分ならすると思う。
0742デフォルトの名無しさん2006/05/03(水) 01:20:12
int a[2][3];
int (*p)[3] = a;
とできることをはじめて知った。
テキストには1次元の説明しかないからわからなかったよ。
0743訂正2006/05/03(水) 01:20:30
if(blickflag==0){
 x=900;blickfrag++;
}
else{
 x=300;blickflag--;
}
0744デフォルトの名無しさん2006/05/03(水) 03:31:55
>>742 で、そのポインタ型を関数のプロトタイプ宣言で引数に取ると
void hoge(int(*)[3])云々と

どう見ても肛門です
0745デフォルトの名無しさん2006/05/03(水) 07:49:29
>>742
typedef int ArrayInt[3];とおけばその宣言はこう書き換えられる。
ArrayInt a[2];
ArrayInt *p = a;
07467312006/05/03(水) 17:22:20
731→740を更にあれこれ改良、目的に合わせ変形して、
自分が長年作りたかったものが出来ました

皆様ありがとうございました。WinAPIの質問スレで無いところに
質問に押しかけてしまった事をお詫びします
0747デフォルトの名無しさん2006/05/03(水) 23:11:21
構造体をvectorで作れるのでつか?
0748デフォルトの名無しさん2006/05/03(水) 23:31:34
そりゃもう
0749デフォルトの名無しさん2006/05/03(水) 23:39:34
STL最強ですね
0750デフォルトの名無しさん2006/05/04(木) 08:33:59
標準入力からfgetsした場合の文字コードって何になるのでしょうか?
UNIX系の環境の場合はLANGに指定されているコードと考えていいでしょうか?
Windows環境の場合はShift-JISでしょうか?
0751デフォルトの名無しさん2006/05/04(木) 08:46:24
ダンプしてみると良いよ
0752デフォルトの名無しさん2006/05/04(木) 09:42:50
>>751
詳しく
0753デフォルトの名無しさん2006/05/04(木) 09:59:38
詳しくも何も、fgets()成功してたらそのバッファをダンプするだけだろ。
0754デフォルトの名無しさん2006/05/04(木) 10:01:48
ダンプメソッドが見つかりません。
dump?
dmp?
0755デフォルトの名無しさん2006/05/04(木) 10:04:02
charの配列の内容をそのままループで出してみるだけの事だろ・・・・
0756デフォルトの名無しさん2006/05/04(木) 10:44:37
FILE * fp = fopen('yourFile", "r");
char buf[LENGTH_AS_YOU_WISH];
fgets(buf, sizeof(buf), fp);
fclose(fp);
for (int ch; * ch; ++ch) {
printf("%#02x ", * ch);
}
0757デフォルトの名無しさん2006/05/04(木) 10:52:08
つっこみどころが多すぎ(w
0758デフォルトの名無しさん2006/05/04(木) 10:59:18
C99前提だとかファイル名とかシンボル名が狙いすぎだとか?
0759デフォルトの名無しさん2006/05/04(木) 11:03:32
>757
まあそういわずにコンパイルしてみろ。
ちゃんと動くから。
何で動くかは自分で考えろ。
0760デフォルトの名無しさん2006/05/04(木) 11:37:09
intを2バイトと決めつけている点が何ともはや。
0761デフォルトの名無しさん2006/05/04(木) 12:32:09
×ちゃんと動くから。
○コンパイルエラーが発生するから。

×何で動くかは自分で考えろ。
○何でエラーが発生するかは自分で考えろ。
0762デフォルトの名無しさん2006/05/04(木) 12:57:28
>>756
動かねーぞ
てことで、Cで動く場合で手直しさせてもらったよ
#include<stdio.h>
#defineyourFile"ドライブ:/PATH"
#defineLENGTH_AS_YOU_WISH100//適宜な数字
voidmain(void){
intcch=0;
int*ch=&cch;
FILE*fp=fopen(yourFile,"r");
charbuf[LENGTH_AS_YOU_WISH];
fgets(buf,sizeof(buf),fp);
fclose(fp);
for(*ch=1;*ch;++ch){
printf("%#02x ", *ch);
}
}
0763デフォルトの名無しさん2006/05/04(木) 13:28:59
>>762
動かないし、何がやりたいか意味不明
0764デフォルトの名無しさん2006/05/04(木) 13:39:14
こっちのほうが意味が分かりやすいかもしれないな
#include<stdio.h>
#defineyourFile"ドライブ:/PATH"
#defineLENGTH_AS_YOU_WISH100
voidmain(void){
intcch=1;
int*ch=&cch;
FILE*fp=fopen(yourFile,"r");
charbuf[LENGTH_AS_YOU_WISH];
fgets(buf,sizeof(buf),fp);
fclose(fp);
for(ch=&cch;*ch;++ch){
printf("%#02x ", *ch);
}
}
0765デフォルトの名無しさん2006/05/04(木) 13:42:04
>>763
ファイルが無きゃ動かない、これ当然
0766デフォルトの名無しさん2006/05/04(木) 13:50:28
C言語ではコンパイルできない。それすらわからん馬鹿しかいなのか?
0767デフォルトの名無しさん2006/05/04(木) 14:18:48
>762,764
本筋とは離れるが、トークン区切りにタブを使うのはどうかと思わないでもない。

>766
単純な推測すら出来ない馬鹿はいるみたいだけどね。
0768デフォルトの名無しさん2006/05/04(木) 14:23:05
メモリダンプも満足に書けない様なヤシしか居ないのかよ
0769デフォルトの名無しさん2006/05/04(木) 14:38:53
すまんが764がマジで何をやろうとしているか理解できないんだが、
誰か解説してくれ。
0770デフォルトの名無しさん2006/05/04(木) 14:48:47
>>769
++chを--chに直してやってみてよ(修正)。
一見、forループはbuffとは関係ないようだけど、
bufが&chのアドレスに対してどの位置に配置されるのかが分かれば、分かるよ。
あと、Cにはやっぱデバッガが必須かな。
0771デフォルトの名無しさん2006/05/04(木) 14:52:01
>>753のプログラムを書いてたのかと思ってたが
char cchとchar buf[]の位置関係を変なやり方で調べるプログラムだったのか
0772デフォルトの名無しさん2006/05/04(木) 14:53:51
>>770
--ならまだ理解できるが、上の奴らは自信満々なのはなんでだ?
あとbufの中身をダンプしたいだけなら、そんな書き方する奴は馬鹿としか思えないんだが。
0773デフォルトの名無しさん2006/05/04(木) 14:58:48
STL以外で有益な物って何?
0774デフォルトの名無しさん2006/05/04(木) 14:59:40
>>773
もっと具体的に範囲を絞ってほしいが、STLが例に挙がるんならBoostとか
0775デフォルトの名無しさん2006/05/04(木) 15:03:33
>>773
金
0776デフォルトの名無しさん2006/05/04(木) 15:58:21
あーもう、>756あたりが諸悪の根源か?
>756を最低限訂正するとこんな感じ。
- for (int ch; * ch; ++ch) {
- printf("%#02x ", * ch);
+ for (int ch = 0; buf[ch]; ++ch) {
+ printf("%#02x ", buf[ch]);

>>759
決め付けはいかんぞ。

>>760
その意見も見当違いだ。

>>762>>764>>770
変に凝ろうとしてど壷にはまっている。
0777デフォルトの名無しさん2006/05/04(木) 16:03:39
>>756と>>762がウンコ過ぎた、でファイナルアンサー
0778762=764=7702006/05/04(木) 16:07:05
うんこです
ありがとうございました
0779デフォルトの名無しさん2006/05/04(木) 17:20:35
C++勉強中の超初心者です。
以下のプログラムがコンパイル出来ません。
どうすればよいでしょうか、教えてください。

-------------------------------------
#include <memory>
int main(void)
{
std::auto_ptr<int> p(new int);
*p = 10;
return 0;
}
-------------------------------------
0780デフォルトの名無しさん2006/05/04(木) 17:28:33
エラーメッセージ貼らない奴には答えない主義。
0781デフォルトの名無しさん2006/05/04(木) 17:29:49
相手にはするんだねw
0782デフォルトの名無しさん2006/05/04(木) 17:52:21
780>
すいません、エラーメッセージを貼ります。
p.cppという名前で保存し、
Linux(open suse 10.0)でコンパイルしたときのメッセージです。

--------------------------------------------------
$ gcc p.cpp
/tmp/ccEClR2N.o: In function `main':
p.cpp:(.text+0x23): undefined reference to `operator new(unsigned int)'
/tmp/ccEClR2N.o: In function `std::auto_ptr<int>::~auto_ptr()':
p.cpp:(.gnu.linkonce.t._ZNSt8auto_ptrIiED1Ev[std::auto_ptr<int>::~auto_ptr()]+0x10): undefined reference to `operator delete(void*)'
/tmp/ccEClR2N.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
--------------------------------------------------
0783デフォルトの名無しさん2006/05/04(木) 17:57:05
>>782
c++用のライブラリがリンクされてないんじゃね?
0784デフォルトの名無しさん2006/05/04(木) 17:58:50
ってか、普通g++だろ・・・
0785デフォルトの名無しさん2006/05/04(木) 18:14:09
783>
784>
g++にしたら解決しました。
皆様ありがとうございました。
0786VC坊2006/05/04(木) 18:57:39
g++ってなんだ?

0787デフォルトの名無しさん2006/05/04(木) 19:11:20
│ ≡  ('('('('A` )
│≡ 〜( ( ( ( 〜)
↓ ≡  ノノノノ ノ
0788デフォルトの名無しさん2006/05/04(木) 21:39:27
786>
g++コマンドのマニュアルによると、

名称:
g++ - GNU プロジェクト C++ コンパイラ (v2.4)

解説:
Cコンパイラおよび C++ コンパイラは統合されました。
g++ は gcc に C++を解釈するようにするオプションを
つけてコールするスクリプトです。詳細は英語版のオン
ラインマニュアルおよび gcc(1) を参照して下さい。

と書いてありました。具体的にどういうオプションかは
g++の中身をざっとみてみましたが、わかりませんでした。
0789デフォルトの名無しさん2006/05/04(木) 23:43:16
バイナリダンプのソースどこかに転がってないでつか?
0790デフォルトの名無しさん2006/05/04(木) 23:55:09
>>789
main(i,c){for(;~(c=getchar());++i>16?puts(""),i=1:0)printf(" %02X",c);puts("");}
0791デフォルトの名無しさん2006/05/05(金) 00:58:52
こ、転がってるぅーーーーーーーー
0792デフォルトの名無しさん2006/05/05(金) 09:56:02


newでの失敗の返り値って NULL でおk?
vc2005です。
0793デフォルトの名無しさん2006/05/05(金) 10:19:29
いいえ。例外が飛びます。
0794デフォルトの名無しさん2006/05/05(金) 10:37:30
new(nothrow) なら NULL が返ってくる。
new なら bad_alloc 例外が投げられる。
0795デフォルトの名無しさん2006/05/05(金) 11:52:50
A10011
A11012
A12013
と続くファイルがあって、

FILE *p;
char a[1],b[2];
int c;
char e[1];

fscanf(p,"%1s%2s%3d",a,b,&c);
strcpy(e,a);
printf("%s\n",e);

fscanf(p,"%1s%2s%3d",a,b,&c);
printf("%s\n",e);

とやると、最初はAと表示されるけど、
二度目のprintfで出力されるのがAAになってしまうんだけど、どういう理由なんでしょうか。
0796デフォルトの名無しさん2006/05/05(金) 11:58:49
>>795
配列の範囲外アクセスで妙な事になっている。
終端の'\0'を保持できるように、
char a[2], b[3];
char e[2];
とすべし。
0797デフォルトの名無しさん2006/05/05(金) 12:15:19
#include <iostream.h>

void main (void)
{
struct hoge{
long a;
char* p;
};

struct hoge* abc;
long work[2];

abc = (hoge*)work;
abc->a = 10;
abc->p = "a";

cout << work[0] << '\n';
cout << (char*)work[1] << '\n';
}
このプログラムに、文法的に危険、又は致命的な部分はありますでしょうか?
work[1]にアドレス数値入れたりして危険な香りがぷんぷんするのですが、一応動いているので
問題なければ使用していこうと思っているのですが・・・
0798デフォルトの名無しさん2006/05/05(金) 12:23:44
>>797
何がしたいのかよー分からん。
環境によってはそれで動くだろうが、
どんな環境を想定してるか、
またはなぜ hoge が直接使えないのか、
そのあたりの説明が無いと何とも言えん。

それ以前にもいろいろ言いたい事もあるし・・・。
0799デフォルトの名無しさん2006/05/05(金) 12:34:31
>>796
ああそっか。またやっちゃったよこのミス……。
ありがとう。
0800デフォルトの名無しさん2006/05/05(金) 12:39:57
>>798
ええと、環境はwindowsxpを想定しています。
具体的に申しますと、グローバルな構造体のワークエリア(上記プログラムでlong work[2]にあたります)に
構造体(上記でabcにあたります)で数値又はポインタを出し入れしたいというのが目的です。

同型のグローバルな構造体がたくさんありまして、個別にワークエリアをlongから構造体に変えたりとかは
難しい状況なので、こう苦しい書き方をしているのですが・・・^^;
0801デフォルトの名無しさん2006/05/05(金) 12:45:11
>>800
意味がよく分からんが、
とりあえず cout のところで
abc を使ってアクセスしない理由が知りたい。
0802デフォルトの名無しさん2006/05/05(金) 12:58:54
申し訳ありません、実際に使用するプログラムと上記プログラムが違っていることをお許しください。
上記プログラムは実際に使用するプログラムを簡略した書き方にしています。

ですので、上記プログラムですとabcを使ってアクセスしても構わないと思うのですが、
実際のプログラムですとworkの方でアクセスしたい、、という感じです。お手数かけます
0803デフォルトの名無しさん2006/05/05(金) 13:25:51
そんな怪しげなコードをメンテナンスしていきたいなら別にいいんでない?
或いは捨てることが判っているコードだとか。

まぁ、今後もメンテナンスしていく必要があるならやめた方がいいとは思うけどね。
0804デフォルトの名無しさん2006/05/05(金) 14:05:53
>>802
「64bit環境対象外」&「CとC++のコーディングが混ざっててキモイ」等々
嫌な感じがしないではないが、今動けば良いと割り切ってしまえるのであればOK
0805デフォルトの名無しさん2006/05/05(金) 14:14:53
RPGツクールのPNG技術をおらに分けて欲しい。ちなみにプログラム初心者。
現在DXライブラリでゲーム作ってるんだけど、ちゃんと表示されないで困ってる・・・
もしかして256色しか対応してないのかな・・・



スレ違い?(´・ω・`)
0806デフォルトの名無しさん2006/05/05(金) 14:16:45
f2cのソースリスト教えて下さい。探しても分かりませんでした。
0807デフォルトの名無しさん2006/05/05(金) 14:19:29
>>806
ぐぐれ。

>>805
聞きたいポイントがわからん。DXライブラリとやらがDirectXのことなら専用スレがある。
0808デフォルトの名無しさん2006/05/05(金) 15:36:09
これからC言語を勉強する場合、まず図書館で本を借りてこようと思ったのですが
2002〜2004のC言語の参考書って今でも通用するのでしょうか?

やっぱり最新の2006年度版を買って勉強するべきでしょうか?
0809デフォルトの名無しさん2006/05/05(金) 15:42:21
>>808
言語について書かれてある本ならば問題ない
開発環境について書かれてあるならば
その内容は古くなってるかもわからんね
0810デフォルトの名無しさん2006/05/05(金) 15:55:19
そういえば、自分の経験からいくと、
「Visual C++入門」だとか、「C++ Builder入門」だとか、
ある特定の開発環境に限定した書籍で、良書を見たことがないのだが。

言語の解説はいまいち、開発環境の使い方の解説もいまいちといった、
中途半端な本ばかりだという印象がある。
0811デフォルトの名無しさん2006/05/05(金) 15:58:34
>>809,810
ありがとうございます。
まずは図書館で、言語についての本を借りてこようと思います。
0812デフォルトの名無しさん2006/05/05(金) 16:03:32
まぁ入門書はあくまでも入門書だからな
0813デフォルトの名無しさん2006/05/05(金) 16:26:37
>>802
cout の方でも abc に相当するポインタを作って
使うわけにはいかないの?
0814デフォルトの名無しさん2006/05/05(金) 18:04:23
>>806
>>http://pc8.2ch.net/test/read.cgi/tech/1146323457/187
0815デフォルトの名無しさん2006/05/05(金) 19:22:31
ファイルサイズを得るにはどうすればいいんでしょう?
0816デフォルトの名無しさん2006/05/05(金) 19:24:02
fseek,ftell
0817デフォルトの名無しさん2006/05/05(金) 19:26:10
なるほど
0818デフォルトの名無しさん2006/05/05(金) 19:45:34
>>815
環境依存しない完璧な手段はない。
例えばsize_tが4バイトの環境で2GB以下のファイルで、ファイルシステムがサイズに関して小細工しない場合に限り、>816でできるかもしれない。
0819デフォルトの名無しさん2006/05/05(金) 20:40:27
>>818
どうもご親切に。
0820デフォルトの名無しさん2006/05/05(金) 20:41:23
バイナリデータを格納する場合はcharの配列に入れた方がいいのかな?
0821デフォルトの名無しさん2006/05/05(金) 20:54:20
お好きなように
0822デフォルトの名無しさん2006/05/05(金) 21:11:00
fstreamのオブジェクトからバイナリデータをmemcpyする事ってできる?
0823デフォルトの名無しさん2006/05/05(金) 21:45:37
自作ソフトが作りたくてVC#expressを入れたんだけど、
これってどうやってexe作るの?
[ビルド]→[newPgの発行]でひたすらOK押していったら、setup.exeってのが出来たんだけど
インストールしたりレジストリ弄ったりしちゃうんだけど…
ふっつーのVectorで配布してるようなの作る方法教えてー
08248232006/05/05(金) 21:46:44
てか今更だけどC#ってスレ違いだったり…?
0825デフォルトの名無しさん2006/05/05(金) 21:50:14
バイナリはヘキサにして%02Xにして保管しとくと後々読み出すとき楽だよ
文字列から数字へがatoi以外知らないから、自分の場合ファイルに保管するけど、
例えば
char* a="あいうえお";
FILE *p;
p=fopen("ドライブ:/path","a");
fprintf(p,"%02X",a);
fclose(p);
わざわざファイルに保管しなくとも、文字列をヘキサなど数字で保管できる関数ややり方があれば便利だなと思うんだけど。
0826デフォルトの名無しさん2006/05/05(金) 22:15:52
>>822
memcpyなんぞいらん。fstreamからrdbuf()->sgetn()使え。
0827デフォルトの名無しさん2006/05/05(金) 22:25:03
>>823
ビデオの再生ボタンみたいなのを押すと幸せになれるよ
0828デフォルトの名無しさん2006/05/05(金) 22:34:40
>>827
ちょっとだけ幸せは得ましたが、自分だけの幸せで終わりそうです。
みんなが幸せになるにはどうすれば…?
08298252006/05/05(金) 23:37:38
ゴメン。825じゃだめだ。
char* a="あいうえお";
unsigned int i=0;
FILE *p;
printf("%d",strlen(a)-1);
p=fopen("ドライブ:/パス","a");
for(i=0;i<strlen(a);i++){
fprintf(p,"%04x",a);a++;}
fclose(p);
です、ヘキサ保存。
0830デフォルトの名無しさん2006/05/05(金) 23:43:01
よりによってO(n²)かよ
08318252006/05/06(土) 00:00:35
もう一箇所
a++;ではなく、a=a+2;
0832デフォルトの名無しさん2006/05/06(土) 00:17:34
・DLL
・上記DLLをロードするプログラム
って、両方ともコンパイラは同種にしないとだめですか?
それとも両者(DLL、プログラム)がANSI-C準拠のコードであれば問題なし?
0833デフォルトの名無しさん2006/05/06(土) 00:38:56
>>826
ありがとうございます。
0834デフォルトの名無しさん2006/05/06(土) 00:43:49
>>832
そもそもDLL自体、ANSI Cの規格ではない。
あとはわかるな?
08358322006/05/06(土) 01:42:15
>>834
「あとはわかるな?」と言われても、どうとでも解釈できるような。
都合の良いように解釈すると、「コードの内容に関係なく、
MS固有仕様をサポートしているコンパイラであれば、組み合わせは何でもあり」ってことですか?
0836デフォルトの名無しさん2006/05/06(土) 02:10:21
>>835
うんにゃ、俺は別に>>834ではないが、そもそもdllやexeを
作るのはコンパイラじゃないってことはわかってるのか?
0837832/8352006/05/06(土) 02:49:52
>>836
すみません、よくわかってないです。
コンパイラで機械語に落とし込んでリンカで実行ファイルにする、ということを指していますか?

ちなみにやろうとしていることは、
リンカ機能を持つコンパイラAでDLL(hoge.dll)を作成後、
リンカ機能を持つコンパイラBでhoge.dllをロードするhoge.exeを作成しようということです。
これでhoge.exeを実行したら正常動作するのか、機械語レベルで誤動作するのか気になっています。

(でもDLLを提供しているサイトでは環境ごとにDLLファイルを分けてなかったような気がしてきました)

0838デフォルトの名無しさん2006/05/06(土) 03:07:10
>>837
>これでhoge.exeを実行したら正常動作するのか、機械語レベルで誤動作するのか気になっています。
だから、そこが根本的に間違っているんだ。
いいかね?
hoge.dllやhoge.exeが正常に(コンパイルエラーもリンクエラーもなく)作成できたなら
どんな動作結果が出ようとも、それは機械語レベルで「正常」に動作しているのだ。
そこでお前の思ったように動作しないとしたら、それはお前の作り方が間違って
いたからだ。
0839デフォルトの名無しさん2006/05/06(土) 03:52:45
何か答えてる方が無理に訳分からなくしているような。

DLLが公開する関数の、
・返値の型
・引数の数と型
・呼び出し規約
を正しく一致させて呼べば、違う言語からでも呼び出せる。
0840デフォルトの名無しさん2006/05/06(土) 04:04:09
>>839
それがわかるようなら>>832や>>835や>>837のようなレスが
付くはずがないんだがなあ。
0841デフォルトの名無しさん2006/05/06(土) 04:16:05
正しく設計してあることも前提だけどね。
たとえばFILE*を渡してたりするとNG。
0842デフォルトの名無しさん2006/05/06(土) 05:12:40
>>841
そりゃいくらなんでも具体的過ぎでしょ?
おいらは日常的にMSVCRT.DLLとFILE*を
やりとりしとるよ?
0843デフォルトの名無しさん2006/05/06(土) 05:54:51
俺の作ったASCII,UTF16(UTF-8未対応)
のファイルダンプのCのソース出して良い?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27657
0844832/835/8372006/05/06(土) 06:22:54
>838-842
無粋な質問をしてしまったようで、すみません。
そもそもDLL(実行ファイル)の概念をよく理解していなかったようで、
「CでつくったDLLはCで(かつ同じ環境で)つくったEXEからしか使えない」という認識を
持っていたのが間違いの原因でした。

>>841
>正しく設計してあることも前提だけどね。
>たとえばFILE*を渡してたりするとNG。
これがNGなのはなぜでしょうか。
「FILE*を渡すこと」が正しい設計でない、というのがよくわからないのですが、
引数や返却値はint,charなどの基本型でないとだめというわけではないですよね。
もしくは上記は「違う言語から呼び出す場合(呼び出し側がCでDLLがC以外の言語)」について
言及していますか?

0845デフォルトの名無しさん2006/05/06(土) 06:58:45
ポインタがどうか判断出来ない命名が有るから気をつけろということでは?
0846デフォルトの名無しさん2006/05/06(土) 08:18:06
hint: FILE構造体は実装依存。
0847デフォルトの名無しさん2006/05/06(土) 09:29:18
EXEでnewした物をDLLでdeleteとか、その逆もダメだな。
0848デフォルトの名無しさん2006/05/06(土) 09:54:02
>>846の通り
たとえ関数の引数の型があっていてもヘッダによってメモリレイアウトや実装が違うと
そこでNGになる

C言語はバイナリのレイアウトを規定していない
FILE構造体も当然そう

バイナリレベルでの互換性がないわけ
そのためにIDL等が存在するわけだ
0849デフォルトの名無しさん2006/05/06(土) 13:57:10
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(void){
char* a="abcde";
unsigned int i=0;
FILE *p;
p=fopen("ドライブ:/パス","a");
for(i=0;i<strlen(a);i++){
fprintf(p,"%04x",*a);a++;}
fclose(p);
}
だとうまくファイルにabcdeのHexコードが入るんだけど、
2Byte文字の"あいうえお"とか使うと例えば'あ'は82a0hなんだけど、
ffffff82ffffffa0とかおのおの4Byteに変更されてしまう。
何か82a0になるようなうまい方法ないかな。
0850デフォルトの名無しさん2006/05/06(土) 13:58:12
charをunsigned charにしなはれ。
0851デフォルトの名無しさん2006/05/06(土) 14:06:15
>>850
それだけだと 0082 00a0 になってダメなんじゃない?
0852デフォルトの名無しさん2006/05/06(土) 14:19:43
>>850
ありがとう、その通りでうまくいきました。
他部分も手直しして、これで1Byteでも2Byteでもうまくいきました。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(void){
unsigned char* a="abcde";//"あいうえお"でもOK
int i=0;
int b=strlen(a);
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","a");
for(i=0;i<b;i++){
fprintf(p,"%02x",*a);a++;}
fclose(p);
}
ありがとう、聞いて良かったです。
0853デフォルトの名無しさん2006/05/06(土) 14:55:54
>>852
"abcde" は char の配列だし、 strlen() の引数も char* だから
a の型は char* のまま、 *a を (unsigned char)*a にするのが正解。
char const* にするとなお良し(C++なら必須)。

あとは、
main の戻り値は int にしとけ。
インデントする気が無いならソース貼るのに全角スペース混ぜるな。
0854デフォルトの名無しさん2006/05/06(土) 15:38:53
コンパイラオプションで、charをunsignedにするのが常套手段
0855デフォルトの名無しさん2006/05/06(土) 15:39:57
修正しました(C,C++双方でやってみました)
#include<stdio.h>
#include<string.h>
int main(void){
const char* a="abcde";//"あいうえお"でもOK
int i=0;
int b=strlen(a);
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","a");
for(i=0;i<b;i++){
fprintf(p,"%02x",(unsignedchar)*a);a++;}
fclose(p);
return 0;
}
あと、ファイル読み込みのほうですが、参考になるが分かりませんが一応セットで・・
#include<stdio.h>
int main(void){
char b;
int i=0;
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","r");
while(fscanf(p,"%02X",&b)!=-1){
printf("%c",b);}
fclose(p);
return 0;
}
FILE処理失敗した場合の場合分けが双方ないのですが、
何かのネタにでもしてもらえれば幸いです。
0856デフォルトの名無しさん2006/05/06(土) 18:50:19
>>855
そういうふうに1バイトずつデータを読み書きしたいのならgetc/putcがお勧め。
0857デフォルトの名無しさん2006/05/06(土) 19:17:33
バイナリデータの入れ替えは何を使うのですか?
0858デフォルトの名無しさん2006/05/06(土) 19:25:03
キャラクタだからといって特別扱いはしてないから、そのままバイナリもいける。
0859デフォルトの名無しさん2006/05/06(土) 22:29:22
>>857 : error: too few arguments to function `入れ替え'
08608552006/05/07(日) 00:05:51
バイナリということで、簡単なサンプルですが作ってみました。
#include<stdio.h>
int main(void){
char b=0;
FILE *p;
FILE *pcopy;
p=fopen("c:/windows/デスクトップ/internet.lnk","r");
pcopy=fopen("c:/windows/デスクトップ/internet2.lnk","w");
while((b=getc(p))!=-1){
printf("%c",b);
fprintf(pcopy,"%c",b);
}
fclose(p);
return0;
}
使い方は簡単です。適宜なディレクトリにInternetショートカットを作り、名前を
この例の場合Internetとしています。
そして、fopenのある行2つを適宜なディレクトリにして、実行すれば、ソース経由でコピペされたバイナリで新たにInternetショートカットができてるはずです。
もっと使えるものに改良してもらえればありがたいです。
0861デフォルトの名無しさん2006/05/07(日) 00:20:47
PNGのCRCをC/C++で計算するソースって転がってないですか?
0862デフォルトの名無しさん2006/05/07(日) 00:30:31
>>860
インターネットショートカットは拡張子urlだけど。
ちなみに拡張子lnkのショートカットはバイナリファイルだからバイナリモード使え。
0863デフォルトの名無しさん2006/05/07(日) 00:31:52
>860
Cの基本としてbはintで定義しようね。
あと-1ではなくEOFとの比較に。
0864デフォルトの名無しさん2006/05/07(日) 00:44:48
>>860で一つ大事なのが抜けてました。
return 0;の手前にfclose(pcopy);です。
0865デフォルトの名無しさん2006/05/07(日) 00:45:26
864より863の方が大事だと思う。
0866デフォルトの名無しさん2006/05/07(日) 01:25:01
>>861
普通にPNGのソースじゃ駄目なの?
0867デフォルトの名無しさん2006/05/07(日) 01:27:22
>>860
バイナリモードにした方が…
0868デフォルトの名無しさん2006/05/07(日) 02:15:55
透過したいならマスク、圧縮したいならRLEで十分。
0869デフォルトの名無しさん2006/05/07(日) 17:12:19
マルチポストさせていただきます。

Dllに関する質問:
Dllの作成はdefファイルを使ってエクスポートしています。
defの抜粋fnSetColor@5
void HogeHoge::fnSetColor(void){
CColorDialog *col1Dlg= new CColorDialog;
col1Dlg->DoModaltheHogeHoge.();
theHogeHoge.m_Color= col1Dlg->GetColor();

if(col1Dlg != NULL)
delete col1Dlg;
}
呼び出し側:
typedefvoid(*fnSetColor)(void);
fnSetColor pfnSetColor= NULL;

pfnSetColor= (fnSetColor)GetProcAddress(hMod, "fnSetColor");

pfnSetColor();//ここでエラー:Run-Time Check Failure #0 〜

環境:WinXPHomeSP2+ VisualStudio2005です。よろしくお願いします。
0870デフォルトの名無しさん2006/05/07(日) 17:25:41
わかった!
0871デフォルトの名無しさん2006/05/07(日) 17:35:34
こういうのはマルチ煽りとかしてもいいんだろうか
0872デフォルトの名無しさん2006/05/07(日) 18:29:44
>>869
GetProcAddressがエラーで0を返し、それを呼び出そうとしたので、
ぬるぽと化しRun-Time Checkでガッされたという状態。
C++の関数名・変数名はコンパイラによって変形される。GetProcAddressが使うのもその変形された名前。
DEFファイルでどうにかすれば名前はどうにでもなるけど、
HogeHoge::fnSetColorが非メンバなら__thiscallだからアウト。

おとなしく、グローバル関数でラッピングしろ。

extern "C" void HogeHoge_fnSetColor(HogeHoge* p)
{
  p->fnSetColor();
}
08738692006/05/07(日) 18:51:15
>>872氏
GetProcAddressからは関数へのポインタが返ってきています。
#0は The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared
with one calling convention with a function pointer declared
with a different calling convention.
となっておりますので、
呼ばれる関数名と呼ぶときの関数名が違うのではないかと思うんですが?
0874デフォルトの名無しさん2006/05/07(日) 18:56:52
クラスのメンバ関数は暗黙でthisを引数に取るのに呼び出し側で渡してない。
つーかメンバ関数の意味わかってなさそう。
0875デフォルトの名無しさん2006/05/07(日) 19:43:44
char型の配列を unsigned charの配列にするにはどうすれば?
0876デフォルトの名無しさん2006/05/07(日) 19:47:27
>>875
符号が変わる場合があるわけだが、その場合はどうするつもりかね?
0877デフォルトの名無しさん2006/05/07(日) 19:56:42
>>876
全て+なのでその点に関しては大丈夫です。
0878デフォルトの名無しさん2006/05/07(日) 20:01:19
>>877
じゃぁ assert(x >= 0) を入れながらコピーすればいい。

スピードが問題になる場合で、2つの配列の実体が同じでもいいのなら
キャストを使ってコピーを省くことも可能。
0879デフォルトの名無しさん2006/05/07(日) 20:07:16
キャストの方を教えていただけませんか?
(unsigned char)としただけではエラーになるのですが。
0880デフォルトの名無しさん2006/05/07(日) 20:11:15
残念ながら
char a[10];
unsigned char b[10];
b=(unsigned char)a;
みたいなことはできないので中身を一つづつコピーしましょう
0881デフォルトの名無しさん2006/05/07(日) 20:14:07
std::copy(a, a + sizeof(a), b);
でできるわけだが。
0882デフォルトの名無しさん2006/05/07(日) 20:15:10
char a[10];
unsigned char* b;
b=(unsigned char *)a;
0883デフォルトの名無しさん2006/05/07(日) 20:15:52
>>879
本当にキャストをしたいのか?コピーでいいならコピーしとけ。
基本的に、キャストは最後の手段と考えるようであってほしいな。

char a[10];
unsigned char* const b = (unsigned char*)a;

C++ なら
unsigned char* const b = reinterpret_cast<unsigned char*>(a);
0884デフォルトの名無しさん2006/05/07(日) 20:17:56
const unsigned char * b = (unsigned char *)a;
じゃないの?
0885デフォルトの名無しさん2006/05/07(日) 20:20:48
皆さんありがとう。
>>882のでできました。
0886デフォルトの名無しさん2006/05/07(日) 20:21:07
>>884
何故constで受ける? 変更したいかもしれないじゃないか。
0887デフォルトの名無しさん2006/05/07(日) 20:22:08
>>885
意味はきちんと理解してから使おうね。
お姉さんとの約束だぞ。
0888デフォルトの名無しさん2006/05/07(日) 20:22:49
なんでキャストをデフォルトにするかなぁ?
0889デフォルトの名無しさん2006/05/07(日) 20:25:31
>>884
正直、これだけの話じゃ、constにすべかどうかさえわからない
0890デフォルトの名無しさん2006/05/07(日) 20:44:09
>877で、signed charで正数だと言ってるから大丈夫だろう。
0891デフォルトの名無しさん2006/05/07(日) 21:19:03
fscanfでファイルを読み込んで検索するwhile文作ったが、EOFに行ったきりファイルを読み込んでくれない。
ファイルポジションをファイルの先頭に持ってくるにはどうしたら。
0892デフォルトの名無しさん2006/05/07(日) 21:22:18
fseek
0893デフォルトの名無しさん2006/05/07(日) 21:24:17
freopenとかは?
0894デフォルトの名無しさん2006/05/07(日) 21:38:48
>>891
rewind
0895デフォルトの名無しさん2006/05/07(日) 21:42:01
>>891
exit
0896デフォルトの名無しさん2006/05/08(月) 00:29:36
1バイトのint型変数を作るにはどうしたらいいんですか?
0897デフォルトの名無しさん2006/05/08(月) 00:35:20
>>896
int のサイズが何バイトかは選べないよ。
0898デフォルトの名無しさん2006/05/08(月) 00:40:31
1バイトの変数の型(0〜255までの数字を扱える)を新しく作りたいのです。
0899デフォルトの名無しさん2006/05/08(月) 00:44:08
あまり見かけられませんが、構造体にはビットフィールドと呼ばれる技術があります
これは、ひとつのメモリ領域(バイト単位)に名前をつけてビット単位に振り分けるものです

ビットフィールドの作成は、構造体の生成とほぼ同じです
ビットフィールドで使われる方は、通常intまたはunsignedです(signedの場合は上位ビットが符合に使われます)

型 名前: サイズ;

型は説明したとおりです
名前にはメンバ名同様に、このビット領域の名前を指定します
サイズにはビット領域を指定します。3と指定すれば、この名前の領域に3ビット割り当てられます

このような特徴から、ビットフィールドは特定のビット数で確実に表現できる情報に用いられたりします
たとえば、boolean型の変数の作成などにはビットフィールドが有効です
1ビットの変数を生成しておけば、確実に0か1しか入りません
0900デフォルトの名無しさん2006/05/08(月) 00:50:07
wisdomさんありがとう。
0901デフォルトの名無しさん2006/05/08(月) 00:52:56
>>899
> あまり見かけられませんが、構造体にはビットフィールドと呼ばれる技術があります
普通に見かけます。貴方が低能なだけです。

> ビットフィールドで使われる方は、通常intまたはunsignedです(signedの場合は上位ビットが符合に使われます)
方→型。unsignedという型はありません。

加えて言えば、何ビットが1バイトか定義されていないプログラミング言語で
1バイトの変数を決めうちで作るのは規格にそった方法では不可能です。
0902デフォルトの名無しさん2006/05/08(月) 00:54:34
>>901
C/C++ で1バイトのビット数って CHAR_BIT じゃないの?
0903デフォルトの名無しさん2006/05/08(月) 00:58:47
ちょびっツ
0904デフォルトの名無しさん2006/05/08(月) 01:10:36
ただし、ビットフィールド自体は1ビットでも
構造体変数はunsigned(通常は4バイト)の領域であるということに注意してください
先ほどのプログラムのビットフィールドは、そのうちの1ビットなのです



意味ねぇーーーーーーーーーメモリ節約したかたのに
0905デフォルトの名無しさん2006/05/08(月) 01:13:43
>>904
char 使えばいいじゃん。
0906デフォルトの名無しさん2006/05/08(月) 01:16:17
他に方法は無いのかね?
0907デフォルトの名無しさん2006/05/08(月) 01:18:46
>>906 何が不満だ?
0908デフォルトの名無しさん2006/05/08(月) 01:22:23
>>907
もっと色々できるのかなって。この辺がC/C++の限界という事ですか。
0909デフォルトの名無しさん2006/05/08(月) 01:25:56
>>908
違う。お前の望みが不合理なだけ。
0910デフォルトの名無しさん2006/05/08(月) 01:31:00
typedef char smallInt, *smallInt;
で、おk
0911デフォルトの名無しさん2006/05/08(月) 02:22:52
それじゃ初心者には難しいですよ。これで十分。
typedef char smallint_t;
0912デフォルトの名無しさん2006/05/08(月) 02:25:23
intの多次元配列を>>910でやったらかなりのメモリを節約できた。

調子に乗って構造体メンバのintを>>910にしたら
逆にメモリ消費が増えるという?な事になったんだけど何故?
0913デフォルトの名無しさん2006/05/08(月) 02:28:35
>>908
0〜255の正数値を格納したいだけなら、unsigned charを使ってください
一般的な環境なら1byte、8bitです
あなたが意図したとおりに使えるでしょう
0914デフォルトの名無しさん2006/05/08(月) 02:33:45
>>912
アラインメントとかパディングとか
0915デフォルトの名無しさん2006/05/08(月) 02:34:22
>>912
メモリ消費は何で測ってる?
手っ取り早くソース晒せ。
0916デフォルトの名無しさん2006/05/08(月) 02:34:49
Visual C++ 2005 はC99に準拠していますでしょうか?

また、完全に準拠していないとしても、大分部の機能をサポートしているでしょうか?
0917デフォルトの名無しさん2006/05/08(月) 02:41:49
>>912
タスクマネージャ。

ソースはintとstringがごっちゃ混ぜになってる構造体。
09189172006/05/08(月) 02:42:35
>>912じゃなくて>>915
0919デフォルトの名無しさん2006/05/08(月) 02:46:52
>>914
#pragma pack(push,1)
とかいうのを見つけた。ありがとう。
0920デフォルトの名無しさん2006/05/08(月) 02:47:40
よく開発環境で非MFCとか書いてたりしますけど
非MFCの利点とかあるんですか?
0921デフォルトの名無しさん2006/05/08(月) 02:55:44
MFC の糞仕様に悩まされなくて済む。


・・・いや、MFC の DLL が不要。
0922デフォルトの名無しさん2006/05/08(月) 03:03:33
アラインメントを制御すると64bitOSでは動かない?
0923デフォルトの名無しさん2006/05/08(月) 03:11:09
>>921
なるほど、DLL不要だからってことか
0924デフォルトの名無しさん2006/05/08(月) 03:38:59
>>921
MFCスタティックリンクすればどのみちDLL不要だが。
ファイルサイズ? そんなの気にしない
0925デフォルトの名無しさん2006/05/08(月) 07:03:47
>>916
準拠していない。ただ極一部の機能だけは(独自拡張扱いで)対応している。
構造体の最後のメンバに要素数を指定しない配列を置くこと
enumの最後におくカンマ
負の整数の除算の結果
(u)intptr_t
//単一行コメント
restrictの代わりに__restrict
後は/TpコンパイラオプションでC++由来の機能を使える。
inlineやどこでも変数宣言ができることなど。
0926デフォルトの名無しさん2006/05/08(月) 07:10:02
今気づいたけど、>>916の「大分部の機能」にわろた
だいぶんぶってどういう入力のしかたしたんだwww
0927デフォルトの名無しさん2006/05/08(月) 18:38:35
>>925
long longが抜けている。
0928デフォルトの名無しさん2006/05/08(月) 18:38:51
C99に準拠してるコンパイラ自体どれくらいあるんだろう
少なそう
0929デフォルトの名無しさん2006/05/08(月) 19:18:39
>>926
「だいぶぶ」で「ん」が抜けただけだと思われ。
0930デフォルトの名無しさん2006/05/08(月) 19:55:33
おおいたぶ
0931デフォルトの名無しさん2006/05/08(月) 20:54:23
質問です

関数のプロトタイプ宣言とは、どういうことでしょうか?
引数と、返り値の意味の説明も出来ればお願いします。
0932デフォルトの名無しさん2006/05/08(月) 20:55:50
詳しくはK&Rを読め
0933デフォルトの名無しさん2006/05/08(月) 21:20:57
関数の引数だの返り値だのの型がこうなってるんだよー、
ということだけを予め知らせるためのもの。>プロトタイプ
0934デフォルトの名無しさん2006/05/08(月) 21:24:39
ICCとGCCぐらいしかしらんなぁ<C99
0935デフォルトの名無しさん2006/05/08(月) 21:41:55
文法は覚えたけど、次は何を覚えたらいいんだろう?
0936デフォルトの名無しさん2006/05/08(月) 21:46:30
社会常識
0937デフォルトの名無しさん2006/05/08(月) 22:01:48
C++ Builder 5 を使っているんだけど・・・
date() で取得した日付を8文字(yyyymmdd)の数値に変換する方法って何かないですかね。
ヘルプとにらめっこしてみたんだけどそれらしいのが見つからない・・・
どなたか宜しくお願いします。
09389372006/05/08(月) 22:05:47
書き込んでから思い至ったんだけど、(yyyymmdd)の数値をTDateTime型に変換するのでもいいです。
どなたか知恵を・・・
0939デフォルトの名無しさん2006/05/08(月) 22:06:29
>>937
String.Format("yyyymmdd",date());
0940デフォルトの名無しさん2006/05/08(月) 22:08:00
プラットフォームを選ばないなら
1 yyyyの値を文字列にする
2 年の文字列の前に"0"を四つ付ける
3 文字列の最後の4文字を取り出す

でいいんじゃね?mmddも同様に
0941デフォルトの名無しさん2006/05/08(月) 22:09:36
strftime
09429372006/05/08(月) 22:49:20
>>939-941
ありがとうございます。939氏のやり方でなんとかなりました!
お手数をおかけしました。
0943デフォルトの名無しさん2006/05/08(月) 22:55:18
Visual C++でscanf_sを使っていて、それをそのまま他のコンパイラでコンパイルすると
エラーが出るのですが、これって何とかならないのでしょうか?
0944デフォルトの名無しさん2006/05/08(月) 22:55:49
標準のscanfを使ってください
0945デフォルトの名無しさん2006/05/08(月) 23:23:29
数値*数値*数値=積となるようなプログラムが解りません。SCANF関数を使うのが条件です。
0946デフォルトの名無しさん2006/05/08(月) 23:26:55
??
0947デフォルトの名無しさん2006/05/08(月) 23:48:58
>>935
gcc もまだ。 http://gcc.gnu.org/c99status.html
0948デフォルトの名無しさん2006/05/09(火) 00:08:50
>>945
日本語でおk
0949デフォルトの名無しさん2006/05/09(火) 00:18:54
SCANFはscanfとおなじ感じでええのかなっと?

int 積, 数値;
SCANF("%d", &数値);
積=数値 * 数値 * 数値;
0950デフォルトの名無しさん2006/05/09(火) 00:28:43
????????????????????????????????
0951デフォルトの名無しさん2006/05/09(火) 00:41:42
これでいいんじゃね?
main(){ puts("数値*数値*数値=積"); }
0952デフォルトの名無しさん2006/05/09(火) 00:47:37
>>9511
それだと、SCANF関数とやらを使っていない
09539452006/05/09(火) 00:50:20
おまえらその程度かよ。がっかりだ
もう明日から会社来なくていいよ
0954デフォルトの名無しさん2006/05/09(火) 00:52:12
今時SCANFも使えないとはなさけない
0955デフォルトの名無しさん2006/05/09(火) 00:54:58
scanf なら使えますが。
0956デフォルトの名無しさん2006/05/09(火) 01:01:43
>>953 偽物は消え失せろ。正しくはscanfです。明日〆切りなんです。よろしくお願いします
0957デフォルトの名無しさん2006/05/09(火) 01:03:35
>>945,956
宿題はこっち↓

C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/

まぁその質問内容じゃ無理だろうけど。
0958デフォルトの名無しさん2006/05/09(火) 01:03:53
>>945 の言ってる事の意味が分からん。
エスパーの登場キボンヌ。
0959デフォルトの名無しさん2006/05/09(火) 01:14:32
たぶんあれだ、ある数値の3乗を求めたいんじゃないのか?
0960デフォルトの名無しさん2006/05/09(火) 01:39:29
>>958
だからスレ違いの質問に構うなって。のうたりんか君は。
0961デフォルトの名無しさん2006/05/09(火) 03:16:17
下記の関数hoge()内で文字列変数stringの領域確保を行って文字列を格納後、
仮引数で返却するようにしたいのですが、下記プログラムだとstringにNULLが返却されます。
malloc()で確保した領域は上位引数に返る際に解放されてしまうのでしょうか。

#include<stdio.h>
#include<stdlib.h>
void hoge(char *string);

int main(void)
{
char *string = NULL;

hoge(string);
printf("%s\n",string); /* nullが表示される */
return 0;
}

void hoge(char *string)
{
string = (char*)malloc(4);
string[0] = 'a';
string[1] = 'b';
string[2] = 'c';
string[3] = '\0';
return;
}
09629612006/05/09(火) 03:17:09
>>961の「上位引数」は「上位関数」の誤りです。
0963デフォルトの名無しさん2006/05/09(火) 03:18:51
>下記プログラムだとstringにNULLが返却されます。
何も返却されていない。
0964デフォルトの名無しさん2006/05/09(火) 03:21:13
>>961 ttp://www.kouno.jp/home/c_faq/c4.html#8
0965デフォルトの名無しさん2006/05/09(火) 10:33:37
つ参照渡しと値渡し
0966デフォルトの名無しさん2006/05/09(火) 11:56:11
>>961
  char *string = NULL;
  hoge(string); /* ここで渡しているのは NULL */

  hoge(char *string)
  {
    string = (char*)malloc(4); /* ここで書き換えているのは hoge ローカルの string */
    string[0] = 'a';

main の string を書き換えるなら、そのポインタを渡すべき。

  char *string = NULL;
  hoge(&string); /* ここで渡しているのは string へのポインタ */

  hoge(char **string)
  {
    *string = (char*)malloc(4); /* ここで書き換えているのは main の string */
    (*string)[0] = 'a';
0967デフォルトの名無しさん2006/05/09(火) 12:51:18
確保して返すタイプの関数を作るならこんなかんじがお勧め

extern char *alloc_hoge();
extern char free_hoge(char *string);
int main(void)
{
char *string = alloc_hoge(); /* 確保 */
/*いろいろ処理*/
free_hoge(string); /* 後始末 */
}

char *alloc_hoge()
{
char *string = (char*)malloc(4);
/*いろいろ代入*/
return string;
}
char free_hoge(char *string)
{
free(string);
}
0968デフォルトの名無しさん2006/05/09(火) 17:37:35
日本語を含んだフォルダやファイル名を取得したいのですが、
_wsplitpath_s を使っても取得できません。

//////////////////////////////////////////////////////
WCHAR szPath[_MAX_PATH];
GetModuleFileName( NULL, szPath, sizeof(szPath));

// フルパスを分解
WCHAR szDir[_MAX_DIR];
WCHAR szDrive[_MAX_DRIVE];
WCHAR szFName[_MAX_FNAME];
WCHAR szExt[_MAX_EXT];

_wsplitpath_s(szPath,szDrive,szDir,szFName,szExt);

// フォルダ、ファイル名取得
WCHAR szFilePath[_MAX_PATH];
WCHAR szFileName[_MAX_PATH];

wcscpy_s(szFilePath,szDrive);
wcscat_s(szFilePath,szDir);

wcscpy_s(szFileName,szFName);
wcscat_s(szFileName,szExt);
////////////////////////////////////////////////

これを出力してみると、
フォルダの先頭の方の英語の部分までの階層は表示されますが、日本語の部分からは表示されません。
どうしたらよいか具体的に教えてください。
お願いします。
0969デフォルトの名無しさん2006/05/09(火) 17:41:45
GetModuleFileNameW
09709682006/05/09(火) 17:42:56
ちなみにVS2005のコンソールアプリなんですけど。
出力は普通に
wprintf_s(szFilePath);
wprintf_s(szFileName);
としてるだけです。
デバッガでみるとちゃんと中身は入ってるみたいなんですけど、
出力されないです。。。
09719682006/05/09(火) 17:46:30
>>969
早速ありがとうございます。
試してみましたが結果は変わりませんでした。。
0972デフォルトの名無しさん2006/05/09(火) 17:48:40
wprintf_s("%s", szFilePath);
wprintf_s("%s", szFileName);

でどう?
09739682006/05/09(火) 17:55:58
>>972
ありがとうございます。
それだとコンパイルエラーが出たので
wprintf_s(L"%s", szFilePath);
wprintf_s(L"%s", szFileName);
としてみました。

結果は、とりあえず出力されたという点では進展しましたが、
なんだか日本語のところは???????になってしまいました。
0974デフォルトの名無しさん2006/05/09(火) 17:58:20
あぁ、そういやそうだな。
で、何で表示されないんだろう・・・。
デバッガでは szFileName 内はちゃんとしてるんだよね?
09759682006/05/09(火) 18:01:20
>>974
はい。
最終的にwprintf_sのところでは期待した内容になっております。
文字コードとかって関係ないですよね?
0976デフォルトの名無しさん2006/05/09(火) 18:04:25
とりあえず、

wprintf_s(L"%s", L"表示");
wprintf_s(L"表示");

は表示されるのかな?
0977デフォルトの名無しさん2006/05/09(火) 18:18:34
setlocale("")
0978デフォルトの名無しさん2006/05/09(火) 18:29:45
ああ、違う、
setlocale(LC_CTYPE , "");
か。

いずれにせよwchar_t系のコンソール出力はコード変換されてから出力されるんで
デフォルトのCロケールから適切なロケールに変更されてないと日本語は出力できないってだけ。
09799682006/05/09(火) 18:38:16
>>976
表示できませんでした・・・

のですが、
>>977の方に教えていただいた
setlocale( LC_ALL,L"japanese");
を試したらいけました!

皆さんありがとうございました。
0980デフォルトの名無しさん2006/05/09(火) 19:10:19
>>979
ついでに、Visual Studio 2005のデフォとかlocaleとか入ってないので萎える。

#include <tchar.h>
#include <clocale>
#include <cstdio>

#include <windows.h>

void _tmain(void){

_tsetlocale(LC_ALL, _T("jpn")); // これ忘れると、NT系とか日本語ダメだよね。

_tprintf(_T("ごるぁぁもまえら\n"));

}
0981デフォルトの名無しさん2006/05/09(火) 20:53:45
GCC(MinGW)でコンパイルして、time hoge.exe とするとExeの実行時間
がわかるといわれたんだが、

real
user
sys

と3つも出てる。
すまんが、各項目の意味を教えてください。

もしくは、説明しているサイトを教えてください。

よろしくお願い致します。
0982デフォルトの名無しさん2006/05/09(火) 21:09:50
>>981
このへんかな?
ttp://docs.sun.com/app/docs/doc/817-0659/6mgeo5sa0?l=ja&a=view
0983デフォルトの名無しさん2006/05/09(火) 21:18:13
1度関数の中で宣言した値は関数の実行が終わったらどうなるんでしょうか?
たとえば、もう一回関数を呼び出して、値を読み出したらどうなるんでしょうか?
0984デフォルトの名無しさん2006/05/09(火) 21:21:39
試してみてはいかがでしょうか。
0985デフォルトの名無しさん2006/05/09(火) 21:23:57
staticじゃない限りはアレ
0986デフォルトの名無しさん2006/05/09(火) 21:32:19
今、試してみる環境が無いんじゃないか?
0987デフォルトの名無しさん2006/05/09(火) 21:43:52
スタックが壊れてなければ同じだから、
「試してみたら?」は危険かもな。
0988デフォルトの名無しさん2006/05/09(火) 22:46:27
初心者です。繰り返し文の中で

for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}

って書いたらstrcpyの()の中でひっかかったんですけど、
何が悪いのでしょうか?
よろしくお願いします。
0989デフォルトの名無しさん2006/05/09(火) 22:47:21
>>988
頭が悪いんじゃね?
「ひっかかった」ってなんだよ?
0990デフォルトの名無しさん2006/05/09(火) 22:48:02
>>988
「ひっかかった」とは?
それから、rrとssの定義がないと何も言えない。
0991デフォルトの名無しさん2006/05/09(火) 22:48:49
>>988 i と n もわからん。
0992デフォルトの名無しさん2006/05/09(火) 22:50:40
俺のESPが
バッファオーバランか
文字列リテラルの領域に書き込み
だと告げています
0993デフォルトの名無しさん2006/05/09(火) 22:53:14
とりあえず次スレを待て。
09949882006/05/09(火) 22:55:53
スミマセン。これが全文です(´ヘ`;)

#include <stdio.h>
#include <string.h>

int main(void)
{
int i,n;
char ss[80] , rr[80];

strcpy(rr,"aa");

gets(ss);
n = strlen(ss);

for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}

printf("%s\n",rr);

return 0;

}
09959882006/05/09(火) 22:56:33
ひっかかったというのは、ビルドするときにエラーが出たってことです。
説明不足でスミマセンでした・・・
0996デフォルトの名無しさん2006/05/09(火) 23:06:47
何がしたいのか分かりません><
0997デフォルトの名無しさん2006/05/09(火) 23:09:40
次スレ

【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/l50
0998デフォルトの名無しさん2006/05/09(火) 23:11:04
コンパイルエラーならエラーメッセージを貼れ

あとstrcpyのプロトタイプ宣言をよく読め
0999デフォルトの名無しさん2006/05/09(火) 23:14:48
>999
1000デフォルトの名無しさん2006/05/09(火) 23:16:10
1000 なら究極言語誕生
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。