【初心者歓迎】C/C++室 Ver.21【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/09/03(土) 19:35:14ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1121644782/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2005/09/03(土) 19:36:41環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0003デフォルトの名無しさん
2005/09/03(土) 19:37:53とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後氏ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0004デフォルトの名無しさん
2005/09/03(土) 19:39:490005デフォルトの名無しさん
2005/09/03(土) 20:31:490006デフォルトの名無しさん
2005/09/03(土) 20:35:370007デフォルトの名無しさん
2005/09/03(土) 21:16:56>>2
0008デフォルトの名無しさん
2005/09/03(土) 22:05:08初心者質問ですいません
printf("%x",'ソ');とすると5c83と表示されますが
SHIFT-JISコードでは「ソ」は835cとなっております。
なぜ第一バイト目と第二バイト目が逆なのでしょうか
モカニズムを簡単に教えていただけないでしょうか
0009デフォルトの名無しさん
2005/09/03(土) 22:08:32っ[ エンディアン ]
x86はリトルエンディアン。PPCはビッグエンディアン。
0010デフォルトの名無しさん
2005/09/03(土) 22:09:410011デフォルトの名無しさん
2005/09/03(土) 22:15:550012デフォルトの名無しさん
2005/09/03(土) 22:27:380013デフォルトの名無しさん
2005/09/03(土) 22:34:310014デフォルトの名無しさん
2005/09/03(土) 22:46:22まだ完全に生理できませんがなんとか理解できたと思います
文字コードと照らし合わせるような場合は
右のバイトから読みこんで、
数値として受け取るような場合には左のバイトから読んでいくって事ですよね。
くだらんですいませんでしたーー
0015デフォルトの名無しさん
2005/09/04(日) 01:41:01くだらん部分をちゃんと学ばないから
君の書くソースはヘボいんだよ。
0016舞い戻りし14
2005/09/04(日) 02:15:10もう一つ基本的なことのような気はするのですが、よろしくおねがいします。
char str[100]="ごめんなさいa";という文字型配列を用意して
printf("%x\n",str[11]);
この上の文を実行するとffffffa2と表示されます。
「い」のコードは82a2ということなのでa2だけならわかるのですが
ffffffというのはなんなんでしょうか。
またprintf("%x\n",str[12]);ではちゃんと「a」のコード62が表示されるので
どういった違いなのかわかりません。
すみませんが、宜しくお願いいたします。
0017デフォルトの名無しさん
2005/09/04(日) 02:22:38なんで日本語が英語の倍の幅で表示されるか考えたこと有るか?
0018デフォルトの名無しさん
2005/09/04(日) 02:50:28>17はきっと寝ぼけているから無視するとして。
charの値をprintf()に渡そうとすると暗黙の型変換でintに変換される。
0xa2はcharでは-94という負の値なのでintでも同様、負の値と-94になるというわけ。
それを16進で表記するのだから当然、ffffffa2になる。
0019デフォルトの名無しさん
2005/09/04(日) 06:23:42おまえ馬鹿だろ
0020デフォルトの名無しさん
2005/09/04(日) 09:01:07charが符号付きの場合、な。
0021デフォルトの名無しさん
2005/09/04(日) 09:05:06大抵の環境の場合はcharはsignedなはず。
0022デフォルトの名無しさん
2005/09/04(日) 11:59:05>16の環境の場合と書くべきだったな。
>>21
つーか、大抵オプションかpragmaで変更可能なわけだが。
0023デフォルトの名無しさん
2005/09/04(日) 15:33:15class Hoge
{
int* pData;
public:
void Init()
{
pData = new int( 10 );
for( int i = 0; i < 10; i++ )
pData[i] = i;
}
void SetData()
{
for( int i = 0; i < 10; i++ )
pData[i] = i * 10;
}
略
を
(続く
0024続き
2005/09/04(日) 15:34:44a.Init();
Hoge b = a;
a.SetData();
をやってみたところ bの値が 0, 10, 20...
と、なったという事は
bのpData は aのpDataを参照して
pDataは newで確保した分しか存在してない
と、みて良いんでしょうか?
0025デフォルトの名無しさん
2005/09/04(日) 15:36:15Yes, いわゆるシャロウコピー。
0026デフォルトの名無しさん
2005/09/04(日) 15:47:50> pData = new int( 10 );
> for( int i = 0; i < 10; i++ )
> pData[i] = i;
new int(10) はintを1個分確保して10で初期化するんだぞ。
002724
2005/09/04(日) 15:53:10シャロウコピーというのですか
調べてみるとディープコピーってのもあるのですね。
メモリまわりでこんがらがったもので
有難うございました。
0029デフォルトの名無しさん
2005/09/04(日) 16:43:4900,01,02,03,04,05,06,07,08,09
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
このようなファイルの中身をgetcで取り出しmallocで動的に確保したメモリで
二次元配列に入れ表示させるにはどうしたらよいのでしょうか?
動的にしない時は下記のソースでいけるようになったのですが
while ((c = getc(fp)) != EOF) {
//カンマもしくは改行の場合
if (c == ',' || c == '\n' ) {
//文字列を整数に変換し配列へ格納
array[i] = atoi(array2);
i++;
j=0;
//array2中身の初期化
for(int k = 0; k<3; k++){
array2[k] = NULL;
}
}else{
//array2に一時保存
array2[j] = c;
j++;
}
}
int **array;
char *buffer;
array = (int**) malloc (sizeof(int));
array2 = (char*)malloc(sizeof(char));
上記のメモリ確保をつけて二次元配列にするところでポインタのポインタを、
理解しきれてないので詰まっています。
アドバイスをお願いします。
0030デフォルトの名無しさん
2005/09/04(日) 16:55:000031デフォルトの名無しさん
2005/09/04(日) 17:01:40何処で入手するんですか?
0032デフォルトの名無しさん
2005/09/04(日) 17:03:48仕様書を?
0033デフォルトの名無しさん
2005/09/04(日) 17:12:29C言語を
0034デフォルトの名無しさん
2005/09/04(日) 17:12:48コンパイル・システムならOS にもよるが、Unix 系なら普通ははじめからパッケージに含まれてるし
Windows なら、ビジネスソフト売ってるような店なら、扱っていることが多い。
003529
2005/09/04(日) 17:14:13上記のものは動的にしないでファイルの中を一文字ずつ取ってきて一次元配列に入れたのものでして、
これを改造してint **array; 以下のメモリ確保をつけて二次元配列に出来ないものかと思いまして。
0036デフォルトの名無しさん
2005/09/04(日) 17:16:12いっぺんにやろうとするな、まず二次元化したものを作れ。
0037デフォルトの名無しさん
2005/09/04(日) 17:43:42あなたが聞いているのは
「英語の勉強を始めようと思います。英語は何処で入手するんですか?」
これと同じくらいトンチンカンなこと。だから突っ込まれる。
勉強を始めるのに必要なのは「Cのコンパイラまたは開発環境」と「入門書」。
前者は”フリー コンパイラ”でぐぐればいくらでも見つかる。
後者は推薦図書スレに定番一覧へのリンクがある。
0038デフォルトの名無しさん
2005/09/04(日) 18:15:31御指摘ありがとごさます
HSP・Rubyぐらいしかやってない奴ですので・・・
0039デフォルトの名無しさん
2005/09/04(日) 18:21:17免罪符になるとは思っておりませんが
HSP・Ruby等しかやっておらず、C言語というプログラムがあると思っておりました(笑われるかもしれませんが)
どうやら違うらしいですね
元々PCに入ってる何かとか?
スミマセンC言語ド初心者で
0040デフォルトの名無しさん
2005/09/04(日) 18:25:24言語(文法と意味)と言語処理系(言語を解釈するプログラムのセット)を分けて考えるべし。
HSPやRubyは言語処理系が(事実上)ひとつしかないのに対して、
C言語はそうではない。
0041デフォルトの名無しさん
2005/09/04(日) 18:33:39http://www.borland.co.jp/cppbuilder/freecompiler/
VisualC++ Toolkit 2003 (Windowsアプリの開発には別途PlatformSDKが必要)
http://msdn.microsoft.com/visualc/vctoolkit2003/
MinGW (gcc)
http://www.mingw.org/
Cygwin (gcc + unix互換シェル)
http://www.cygwin.com/
DigitalMars C++
http://www.digitalmars.com/
0042デフォルトの名無しさん
2005/09/04(日) 18:34:55>41
レス大変ありがとうございます
0043デフォルトの名無しさん
2005/09/04(日) 19:37:39今作ってるアプリに十数個のヘッダがあるのですが、
インクルードのネストが複雑になってしまったせいか、
hoge.hでclass hogeを宣言しており、
main.cppでhoge *g_pHogeが、
0044デフォルトの名無しさん
2005/09/04(日) 19:41:280045デフォルトの名無しさん
2005/09/04(日) 19:46:06おーい、大丈夫か?
004643
2005/09/04(日) 19:46:20hoge.hでclass hogeを宣言しており、
main.cppで
hoge *g_pHoge = NULL;
(略)
g_pHoge = new hoge(うんたら);
(略)
g_pHoge->DoHoge();
とやると、DoHoge()内で、thisが0xcdcdcdcdになっていて
アクセス違反になりました。
(DoHoge()の実装は、hoge.hのclass hogeの宣言内でインラインで書いています)
hoge.hの最初で
class hoge;
extern hoge *g_pHoge;
とやっても、
class hoge {
} static *g_pHoge;
とやっても同じ結果になりました。
main.hとfuga.hの2箇所でhoge.hをインクルードしており、
main.hとfuga.hはmain.cppとfuga.cppにインクルードされています。
この現象は何が悪くて起こるのでしょうか・・・?
コンパイルは正常に通過します。
よろしくお願いしますm(_ _)m
0047デフォルトの名無しさん
2005/09/04(日) 19:53:49とりあえずデバガ使って、new した時点から g_pHoge のアドレスをチェックしてみそ
0048デフォルトの名無しさん
2005/09/04(日) 19:58:37i _゚ワ゚」
゙´ノノ))))
l ノ゚ヮ゚ノlナメンナゴラァ
ノ⊂)卯!つ
´((く/_||リ
しソ
004946
2005/09/04(日) 20:05:50レスありがとうございます、
呼び出してたDoHoge()はhoge.hにある別のクラスの
同名のメンバ関数でした・・・アクセス違反は別の原因でした、
すみませんorz
ただmain.cppではnewで確保したアドレスを指しているのに
fuga.cppではNULLのままでした
(hoge.hでクラス宣言の後にstatic *g_pInput = NULLとしました)
これが以前も起こった現象で原因がわからないので、
ちゃんと検証してからまた質問させていただきますm(_ _)m
0050デフォルトの名無しさん
2005/09/04(日) 20:35:55static かあ、見逃したぜ。
静的大域変数は内部リンケージを持つから、hoge.hをインクルードしてる翻訳単位全てで別々に実体が生成されてるのが原因。
てか、ヘッダで静的大域変数の定義はやめとけ。
とりあえず、Hogeの静的メンバにでもしとけや。
0051デフォルトの名無しさん
2005/09/04(日) 20:44:28NULL 使うのはヤメレ
0 にしとけ
005249
2005/09/04(日) 21:08:13>hoge.hをインクルードしてる翻訳単位全てで別々に実体が生成
なるほど、知りませんでした・・・どうもありがとうございました。
static *g_pInputはstatic *g_pHogeの間違いでした、書きミス多いorz
なので
hoge.hでextern hoge *g_pHoge;
main.cppでhoge *g_pHoge = 0;
に戻したら直りました。どうもありがとうございましたm(_ _)m
>>51
了解です。
0053デフォルトの名無しさん
2005/09/04(日) 23:48:41本日、C#で作成したDLLをC++できちんと動作するように、指示があったのですが、C++は初めてでよくわかりません。
C#ができるからと考えていた私が甘かった・・・。
やりたいことは、C#で作成したクラスライブラリをC++で実行したい。
ということです。
呼び出し側の情報
クラス名:Execute
メソッド名:ConeectDb
引数:string conStr ->第一引数
:string conPw ->第二引数
戻り値:正常:0 異常:-1
以上をC++側で実行したいだけなのですが・・・。
C++側はボタンを押下するフォームのみ作成はできたのですが、
LoadLibraryなどの使い方をみても良く判らなくて・・・
すみませんが、助けてください ><
0054デフォルトの名無しさん
2005/09/04(日) 23:58:05(・∀ ・) <ねえ>>53って糞スレ立ててたでしょ?
ノ( )ヽ
< >
∧ ∧
ヽ(・∀ ・)ノ <削除以来だしなよー!
(( ノ( )ヽ ))
< >
0055デフォルトの名無しさん
2005/09/05(月) 14:58:23int main()
{
int a;
for(a=0;a<5;a++)
{
printf("ABCDEFG %d\n",a);
}
return 1;
}
出力結果:
ABCDEFG 0
ABCDEFG 1
ABCDEFG 2
ABCDEFG 3
ABCDEFG 4
printf文で1行ごとに改行するのではなく、上書きしていくようにしたいのですが
どうやってよいかわかりません。お願いします。
0056デフォルトの名無しさん
2005/09/05(月) 15:05:59とするとできるよ
0057デフォルトの名無しさん
2005/09/05(月) 15:18:210058デフォルトの名無しさん
2005/09/05(月) 15:24:01>57
改行が1行増えるだけでした。↓
ABCDEFG 0
ABCDEFG 1
:
:
0059デフォルトの名無しさん
2005/09/05(月) 15:49:08扱い方がよくわかりません。
↓の様に使用して一応動いてはいるのですがこれで問題ないのでしょうか…。
using namespace std;
void main() {
vector <vector <string> > vtest;
vtest.resize(1);
vtest[0].push_back("hoge");
vtest[0].push_back("hoge");
printf("%s%s", vtest[0][0].c_str(), vtest[0][1].c_str());
}
0060デフォルトの名無しさん
2005/09/05(月) 16:03:18とC++の参考書にあるんですが
head.hでstatic int a = 0; を宣言して
head.hをインクルードしたファイルで普通に扱えるんですが
ヘッダーをインクルードするってことはヘッダーの中身をコピーするようなものなんでしょうか?
0061デフォルトの名無しさん
2005/09/05(月) 16:09:32#include した所にテキスト展開するだけ。
0062デフォルトの名無しさん
2005/09/05(月) 16:24:00即レスありがとうございます
0063デフォルトの名無しさん
2005/09/05(月) 16:46:57int main()
{
int a;
for(a=0;a<5;a++)
{
printf("\rABCDEFG %d",a);
fflush(stdout);
sleep(1);
}
return 0;
}
0064デフォルトの名無しさん
2005/09/05(月) 16:51:35全然問題ない。
0065デフォルトの名無しさん
2005/09/05(月) 16:54:48VC++にはマネージ拡張といってC#なんかと同じくCLR上で動くコードを吐くモードがある。
そいつを使えばC#でそのDLLを使うときと同じ手順で、そのDLLをC++でも使える。
>>58
56-57の\nを\rに変えてみると。
0066デフォルトの名無しさん
2005/09/05(月) 17:28:37http://pc8.2ch.net/test/read.cgi/tech/1014486422/
0067デフォルトの名無しさん
2005/09/05(月) 17:57:31昔ほんの少しだけC/C++を齧った事があるんだけど一から学びなおすのに適した参考書とかないありませんか?
0068デフォルトの名無しさん
2005/09/05(月) 18:00:38図書、書籍、本等で検索汁
0069デフォルトの名無しさん
2005/09/05(月) 23:29:23間違っちゃいないが、外側も[0]しないでpush_back()すればいいのに。
0070デフォルトの名無しさん
2005/09/05(月) 23:39:28遅くなりました。これで大丈夫でしたか。
vectorで動的に多次元配列を作成できるという記述は検索で引っかかるのですが
実際に多次元配列を作成、操作してるソースが見つからなかったので不安でした。
ありがとうございました。
>>69
あ、言われてみれば確かにそうした方がいいですね。
御指摘ありがとうございます。
0071デフォルトの名無しさん
2005/09/07(水) 02:13:21vectorクラステンプレートについての質問です。
仮にStudentと言うクラスがあったとします。
ここでvectorを用いて
vector <Student *> students;
と宣言するのと
vector <Student> *students;
と宣言するのではどのような違いがあるのでしょうか?
よろしくおねがいします。
0072デフォルトの名無しさん
2005/09/07(水) 04:08:20まぁ後者はあまり使わないんじゃないかな。
0073デフォルトの名無しさん
2005/09/07(水) 07:44:390074デフォルトの名無しさん
2005/09/07(水) 09:20:030075デフォルトの名無しさん
2005/09/07(水) 13:33:490076デフォルトの名無しさん
2005/09/07(水) 15:33:01関数(コールバックの登録)があったような気がするんですが、
何でした?
0077デフォルトの名無しさん
2005/09/07(水) 15:39:58atexit()
0079名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:23:32CPlusClass arrays[4] = {
...(略)
};
と初期化できないのでしょうか?
0080名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:27:32コンストラクタがなく、全てのメンバがpublicならそうできる。
0081名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:29:380082名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:31:03C++じゃクラスも構造体も同じ物だよ
008379
2005/09/10(土) 22:34:00不便
0084デフォルトの名無しさん
2005/09/10(土) 22:43:01class A
{
public:
A(int);
略
};
A array[4] = {
A(1),
A(2),
A(3),
A(4)
};
0085名無しさん@そうだ選挙に行こう
2005/09/11(日) 05:30:35まったく同じじゃないよ
0086名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:04:32C++では大きさゼロの構造体を作っても、最低1バイトのsizeof()になるんじゃ
なかったっけ?
0087名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:28:42いや82に対してそのレスは変ではないかと。
82は別に「Cの構造体とC++の構造体」を比べてるわけじゃないから。
0088名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:50:34ヘルプにも詳しく書いてなくて詰まっています。
0089名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:53:57>>1
0090名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:56:29C++単体じゃ無理。環境依存の動画関連ライブラリが必要
というわけで環境を晒せ。
0091名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:15:46すみません。
CPU:Celeron 1.3G
メモリ:256MB
OS:WindowsXP Visual C++.NET
です。
0092名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:18:09http://wisdom.sakura.ne.jp/system/winapi/media/index.html
0093名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:21:040094名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:30:15フレームごとに処理をしたいのですが、MCIでできますでしょうか?
0095名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:33:240096名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:48:33人を不快にさせるのが上手だな
0097デフォルトの名無しさん
2005/09/13(火) 16:59:29あるいは両方書かなければならないのでしょうか?
0098デフォルトの名無しさん
2005/09/13(火) 17:10:150099デフォルトの名無しさん
2005/09/13(火) 19:03:42???
0100デフォルトの名無しさん
2005/09/13(火) 19:40:550101デフォルトの名無しさん
2005/09/13(火) 19:45:010102デフォルトの名無しさん
2005/09/13(火) 19:57:150103デフォルトの名無しさん
2005/09/13(火) 20:57:190104デフォルトの名無しさん
2005/09/13(火) 21:56:35int a[100]={1,2,3,…,99}; の配列を次のように関数へ渡しました。
for(int i=1;i<99;i++)func(a[i]);
}
void func(int i){ ・・・単純な四則演算の処理・・・ }
関数に『配列そのもの』を渡すのは出来ないと本に書いてあったのですが、
上記のプログラムは正しいですか?
定義された関数には値かポインタしか渡せず、配列そのものは渡せないらしいですが。
コンパイルは通りましたし、実行結果も論理的に正しかったです。
コンパイラはフリーのbccです。
※includeなどのは省略しています。上のは要点のみのプログラムです。※
0105デフォルトの名無しさん
2005/09/13(火) 22:00:42ちなみに、
for(int i=1;i<99;i++)func(a[i]);
として処理した場合、後々のルーチンにバグが出てきます。
しかし、
int num;
for(int i=1;i<99;i++){
num=a[i]
func(num);
}
とすると、そのバグ はなくなります。
やはり配列そのものを関数に渡すのは駄目なのでしょうか?
0106デフォルトの名無しさん
2005/09/13(火) 22:03:200107デフォルトの名無しさん
2005/09/13(火) 22:10:28すみません。
要約すると、配列を関数に渡していいんですか、ということです。。
0108デフォルトの名無しさん
2005/09/13(火) 22:12:260109デフォルトの名無しさん
2005/09/13(火) 22:17:00それは配列そのものではなく、個々の要素を引数として渡しているだけじゃないか。
0110デフォルトの名無しさん
2005/09/13(火) 22:17:300111デフォルトの名無しさん
2005/09/13(火) 22:26:24言われてみればそうですね・・・。
『そのもの』というのは本に書いてあったので、俺も意味がわかってないです。
多分、func(a[i])のようにするのではなく、func(a,i)のように、
分けて渡すという形に書くべきだという事を言いたいんだと思っているんですが。
あとは別のところで聞きますね^^
0112デフォルトの名無しさん
2005/09/13(火) 22:33:51どこで聞いても結局は同じ答えになる。
0113デフォルトの名無しさん
2005/09/13(火) 22:43:08要は普通の変数みたいに値渡しできないってことだろ
配列を関数に与えるときは、配列先頭へのポインタを渡す
ってかfunc(a, i)なんてしてるの見たこと無い
0114デフォルトの名無しさん
2005/09/13(火) 22:52:00return sizeof(a);
}
main(){
char a[100];
printf("%d\n",sizeof(a));
printf("%d\n",func(a));
}
こういうことかなあ
前後の文を読んでみないとよく分からんね
0115デフォルトの名無しさん
2005/09/14(水) 02:46:40>とすると、そのバグ はなくなります。
興味あるな。どんなプログラムなんだろ?
> void func(int i){ ・・・単純な四則演算の処理・・・ }
なんだよな?
0116デフォルトの名無しさん
2005/09/14(水) 20:59:53文字を実数に変換する関数_ttofは、無いのですか?
無いのであれば、どうやって変換するのでしょうか?
0117デフォルトの名無しさん
2005/09/14(水) 21:05:19標準ライブラリならatoi()だろ‥‥_ttoiはVC++の独自関数じゃないのか?
文字から実数はatoiをふまえて予想汁。
0118116
2005/09/14(水) 21:10:21VC++でUNICODEな環境のとき上記を解決できませんか
0119デフォルトの名無しさん
2005/09/14(水) 21:15:37atofでググれ。
0120デフォルトの名無しさん
2005/09/14(水) 21:27:44_tstof()
0121116
2005/09/14(水) 21:28:34ありがとうございました。
ヒントに従ってこんな感じで組んでみたら
とりあえずコンパイルエラーは、出ませんでした
str = CString(buff);
ret = float(_tcstod(str,(_TCHAR **)NULL));
取り急ぎご報告まで
0122デフォルトの名無しさん
2005/09/14(水) 21:33:160123119
2005/09/14(水) 21:36:15俺の目論見だとここを見つけて120の言う_tstofを見つけるはずだったんだが。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_atof.2c_.atoi.2c_._atoi64.2c_.atol.asp
ちなみにそのコードではCStringに変換する意味がない。_tcstodに直接buffを渡せる。
0124デフォルトの名無しさん
2005/09/14(水) 21:55:46頭の_は単にANSI/ISO標準ではないという意味に過ぎん。
_が嫌なら規格厳密合致の狭い世界で生きてろ、と。
0125116
2005/09/14(水) 22:07:46回答ありがとうございます。
大変参考になりました。
しかし、またもや言葉足らずですいません。
開発環境としてVisual Studio 6.0を使用していたのですが、
どうやらVisual Studio 6.0では、_tstofを使えないようです。
ちょろちょろと情報を小出しにしてすいませんでした。
気楽に質問できそうな雰囲気だったので、つい勢いで投稿してしまいました。
0126デフォルトの名無しさん
2005/09/14(水) 22:12:46_wtofは?
0127デフォルトの名無しさん
2005/09/14(水) 22:13:140128デフォルトの名無しさん
2005/09/14(水) 22:23:580129デフォルトの名無しさん
2005/09/14(水) 22:59:10そういやそうだな
#include <stdio.h>
#include <wchar.h>
int wscanf(const wchar_t * restrict format, ...);
0130デフォルトの名無しさん
2005/09/14(水) 23:09:04いや俺はVCだけでプログラム組むわけじゃないので
0131デフォルトの名無しさん
2005/09/14(水) 23:12:430132デフォルトの名無しさん
2005/09/14(水) 23:31:300133デフォルトの名無しさん
2005/09/15(木) 12:45:55そんな流儀が一般的な流儀なんて初耳だな。
0134デフォルトの名無しさん
2005/09/15(木) 12:59:190135デフォルトの名無しさん
2005/09/15(木) 13:08:030136デフォルトの名無しさん
2005/09/15(木) 13:29:07http://pc8.2ch.net/test/read.cgi/tech/1125136478/881
0137デフォルトの名無しさん
2005/09/15(木) 13:34:12「C言語なら俺に聞け! Part 113」というタイトルのスレです。
0138デフォルトの名無しさん
2005/09/15(木) 13:35:390139デフォルトの名無しさん
2005/09/15(木) 15:20:47解決した、ってそれじゃまともなプログラミングできなさそうだが…
次の違いぐらいちゃんとわかるようになるよね?
/*1*/ char ch = 'A'; char *ch_p = &ch;
/*2*/ char str[] = "A"; char *str_p = str; /* or &str, &str[0] */
0140デフォルトの名無しさん
2005/09/15(木) 16:40:49文字列を扱うほとんどのAPIにおいて、文字列がLPTSTRかLPCTSTR
ようするにTCHARのポインタとして宣言されてるのを知らんのか。
I18N&Windows9x系対応を可能な限り簡便化するための方策だよ。
0141デフォルトの名無しさん
2005/09/15(木) 17:20:300142デフォルトの名無しさん
2005/09/15(木) 21:26:130143凶笑面
2005/09/16(金) 02:15:11みんな、見ようぜ。 原作は新潮文庫から出てるよ。
俺はドラゴン桜を見るからビデオに撮るけどな。
0144787
2005/09/16(金) 04:48:51例えば、[スタート]−[プログラム]−[XXXシステム]−[XXX]の場合ですが、ショートカットを起動するというイメージでしょうか?
CreateProcess() を使うのでしょうか?
教えて下さい。
開発環境:VC++6.0
動作OS:できればWin95〜WinXPまで
0145デフォルトの名無しさん
2005/09/16(金) 06:02:100146デフォルトの名無しさん
2005/09/16(金) 07:10:10そう
>>145
1unsigned
0147デフォルトの名無しさん
2005/09/16(金) 08:44:15↑のような書き方は↓のように言われるほど糞ってほんとですか?
904 名前:デフォルトの名無しさん [] 投稿日:2005/09/16(金) 08:09:58
結論はでてる。
仕様にも糞仕様ってものが存在する。
特にプログラムにおいて可読性は最優先事項だ。
一体>>888で何が得られるものがあるのか激しく疑問。
就職作品なら書いてあった時点で落とす。あまりにもキモ過ぎ。
-ここから来ました------------------------
【C++】 DirectX初心者質問スレ Part5 【C++】
http://pc8.2ch.net/test/read.cgi/tech/1122031254/888-
0148デフォルトの名無しさん
2005/09/16(金) 09:02:33俺は普通にやってるけどな。
後で0クリアするよりはスマートで見やすいと思うが。
0149デフォルトの名無しさん
2005/09/16(金) 10:03:06火病患者は精神科で引き取ってもらえ。
0150デフォルトの名無しさん
2005/09/16(金) 12:26:52私はこの書き方は、はじめてみたけど、
てっきりすべての要素をsizeof(DXSTRUCTURE)で埋めてくれるのかと思ったわ。
0151144
2005/09/16(金) 12:40:23"F:\Documents and Settings\USER\スタート メニュー\プログラム\XXXXXXXX"
のようになっていてユーザ名が含まれているため固定で指定することはできません。
今ログインしているスタートメニューのディレクトリを取得する方法があるのでしょうか?
教えて下さい。
0152デフォルトの名無しさん
2005/09/16(金) 12:50:21ある
0153デフォルトの名無しさん
2005/09/16(金) 12:54:290154デフォルトの名無しさん
2005/09/16(金) 13:06:35struct {
int a;
int b;
int c;
} foo = {1};
とすれば、1, 0, 0が入るのだけど知らなかった?
>>148
STARTUPINFOでぐぐると、STARTUPINFO sui = {sizeof(sui),};って例は結構見つかるね。
まぁ、DirectXスレで暴れているのは放置で。
0155デフォルトの名無しさん
2005/09/16(金) 13:25:04使用者が多いVCの方が比較的いいのかな?
通常パッケージで2万か(´・ω・`)
0156デフォルトの名無しさん
2005/09/16(金) 13:36:14正直dwSizeが一番上にあることが前提のソースだから悪趣味といえば悪趣味だな。
マニュアルに定義されてるからいいものの構造体の定義の順番を利用した
プログラムってのはあまりいいとは思えないな。
例えば
struct{int a,b,c;}HOGE;
と
struct{int a,c,b;}HOGE
で結果が変わってしまうってのがどうにも・・・。
0157デフォルトの名無しさん
2005/09/16(金) 13:36:59struct{int b,c,a;}HOGE;
とでもしておいてくれw
0158デフォルトの名無しさん
2005/09/16(金) 13:51:21よくわからないんだけど、これをやると0クリアされるの?
0159デフォルトの名無しさん
2005/09/16(金) 13:53:48ショッパナの要素だけにその値が入って、残りの値が0クリアされる。
0160デフォルトの名無しさん
2005/09/16(金) 13:55:52ちょうどそのよくわからんってとこについて話してるw
よくわからないよな?
0161デフォルトの名無しさん
2005/09/16(金) 14:04:240162デフォルトの名無しさん
2005/09/16(金) 14:22:57struct {
int a;
int b;
int c;
} foo = {0};
ならば、全部の要素がゼロクリアされるという認識でいいのかな?
俺はわざわざmemset(&foo, 0x00, sizeof(foo))ってやってたよorz
まあ、大抵はmallocとの組み合わせだからいいんだけど。
0163デフォルトの名無しさん
2005/09/16(金) 14:28:14>>154
0164デフォルトの名無しさん
2005/09/16(金) 15:11:41STARTUPINFO sui = {0}
でいいじゃん
というか、構造体のコンストラクタに初期化処理入れてるよ俺は。
0165デフォルトの名無しさん
2005/09/16(金) 15:25:53俺の感覚だと、0クリアすることが主目的で
最初のメンバにサイズがあるからついでに入れとけ
って感じだ。
0166デフォルトの名無しさん
2005/09/16(金) 15:30:28構造体の初期化構文そのものを否定しているのか?
>>158
初期化指定子を先頭から埋めて、残りは0が埋められる。
#って、>159が書いてたか。
>>162
その通り。その場合、{0}でも{0, 0, 0}でも同じ。
ついでに言えば、calloc()でも0で埋められるのでやはり、memset()は不要。
>>164
Cにはコンストラクタがないんでね。それに、0フィルではない点に注意。
0167デフォルトの名無しさん
2005/09/16(金) 16:08:33構造体を出力先として使うならクリアなんてしなくていいし
入力元として使うなら、全てのメンバを規定値で初期化するのが普通だろうし。
0168デフォルトの名無しさん
2005/09/16(金) 16:11:09わざわざバグの原因を仕込んでるようなもの。
0169デフォルトの名無しさん
2005/09/16(金) 16:29:59例えばコンストラクタ引数の並びだって
同様の危険性はらんでるし、それは仕方ないところじゃない?
0170デフォルトの名無しさん
2005/09/16(金) 17:27:54ウィンドウズのAPIの場合はいる。
おそろしいことにポインタの有効・無効のチェックをNULLかそうでないかで判断している。
0171デフォルトの名無しさん
2005/09/16(金) 18:38:49画像フォーマットのヘッダや通信関係のヘッダの多くがそう言う構成になってますが。
それとも、フォーマットが変わってもまともに動くように作れと?
#そうなると、単純なバイナリファイルのほぼ全てを否定することになるわけだが。
0172デフォルトの名無しさん
2005/09/16(金) 18:53:01並びが変わったとしてもリビルドさえすれば解決するけど、
STARTUPINFO sui = {sizeof(sui),};
みたく先頭にあると決め打ちしてると、コードを手作業で修正しないとダメじゃない?
0173デフォルトの名無しさん
2005/09/16(金) 18:57:05大丈夫、MSにしろどこにしろ、そうそう簡単に順番変えて自分の首を締めるようなことはしないから。
#設計云々と言うことであれば、メンバにサイズを持つなんてこと自体がアナクロだが。
0174デフォルトの名無しさん
2005/09/16(金) 19:25:53特にメリットがあるわけでもないだろうに
0175デフォルトの名無しさん
2005/09/16(金) 19:37:06struct hoge{
int a , b, c, d , e , f ;
};
hoge h={1,2,,3,4,5,6};
hoge h;
h.a = 1;
h.b = 2;
h.c = 3;
h.d = 4;
h.e = 5;
h.f = 6;
俺は初期化にこんな長いコードを書きたくないから前者の書き方が好き。
0176175
2005/09/16(金) 19:38:300177デフォルトの名無しさん
2005/09/16(金) 19:50:14そんな瑣末なことは好きにしたら?と。
0178デフォルトの名無しさん
2005/09/16(金) 20:31:58そのコードの記述が面倒だからってのを理由にする神経は理解できない。
まあ、いままでそうやって書いちゃった分はしょうがないけど、
これからはなるべく書かないようにしたいな。って内容でFAだろ。
もしくは、なるべく構造体よりクラスを使うことを優先するとかな。
0180デフォルトの名無しさん
2005/09/16(金) 20:50:41int ma;
int mb;
int mc;
huga( int a, int b, int c ) : ma(a), mb(b),mc(c) {}
}
huga h( 1,2,3 );
こうするのかな・・・
0181175
2005/09/16(金) 20:55:14初期化する方法として、構造体のメンバの順に依存するのと、
コンストラクタ(or関数)の引数の順に依存するのには 大きな差は無い。
順番を変えると問題が発生するのは同じ。
0182175
2005/09/16(金) 21:10:03メンバに延々と代入する式を書くしかない。
10箇所で初期化があれば、
10箇所で延々と何行も代入する式を書くしかない。
初期化関数(いや、それどころか2引数以上の関数全て)を作るのも駄目だ。
なぜなら関数の引数の順に依存するのは駄目だからだ。
ま、自分はそもそも解決する気はないけどね。
順に依存するプログラムを>>175で書いてるから分かると思うが、それを肯定してるから。
0183デフォルトの名無しさん
2005/09/16(金) 21:13:57違うよ。
そういうイカレタコードの記述を制限できればいいんだよ。
一つ一つ代入する手間なんてプログラムを組んでるときに割く時間の1%にもみたない。
そんなの面倒臭がってる奴なんか絶対に使えない奴に決まってる。
0184175
2005/09/16(金) 21:26:02すまん。なぜ、構造体の初期化式がイカレテてるのか理解できん。
struct hoge{
・・・・・・
・・・・・・
hoge(int a=0,int b=0,int c=0,........):a(a),b(b),c(d),........
};
こういうコンストラクタと意味的には殆ど等価でしょ?
せいぜい使うときに={...}か(...)の差しかない。
イカレタコードってほどでも無いと思うが
0185デフォルトの名無しさん
2005/09/16(金) 21:30:57その辺の認識から違う人間と議論をするほど馬鹿じゃないよ。オレも。
0186175
2005/09/16(金) 21:36:58了解。
お互い別の宗教の人ということで不毛な議論はしないでおきましょう。
自分もこの話題をこれ以上しても恐らく平行線のままと思いますから。
0187デフォルトの名無しさん
2005/09/16(金) 22:05:400188名無しさん@そうだ選挙に行こう
2005/09/16(金) 23:53:06初期化と代入を混同している典型的バカ。
0189デフォルトの名無しさん
2005/09/16(金) 23:55:470190デフォルトの名無しさん
2005/09/17(土) 01:35:59肯定するやつがいるとは世の中広いわ。
0191デフォルトの名無しさん
2005/09/17(土) 01:37:080192名無しさん@そうだ選挙に行こう
2005/09/17(土) 02:15:58const変数とかリファレンスの変数は、初期化せずにどうやって
代入するおつもりですか?と聞きたい。
0193デフォルトの名無しさん
2005/09/17(土) 02:17:17しないと、コンパイルエラーが出て先に進めない。
0194デフォルトの名無しさん
2005/09/17(土) 02:30:340195175
2005/09/17(土) 08:35:11混同してる気はないな
メンバの順orコンストラクタの順に依存しない方法は全メンバ明示的に代入するしかない。
と言ってるだけだし(俺はそんな初期化が最初の段階で完結しない方法をしたいとは全く思わんが)
>>192
>>193
別に構造体の初期化式を必ず使えって言ってる訳じゃないし
それでカバーできない範囲はコンストラクタを使えば良い。
俺の論点はWINAPIなどのC言語用の構造体はコンストラクタが無いから、
その代わりに構造体の初期化式を使っても問題ないって言う主張だけ。
全メンバ明示的に代入するのはメンドイから。
0196デフォルトの名無しさん
2005/09/17(土) 09:08:02初期化と代入を混同してる(同一視してる)のは >183 のほうじゃないか?
0197183
2005/09/17(土) 09:49:23俺は初期化と代入なんて垣根はどうでもいいと思ってるよ。
ただ、構造体の要素の定義の順序がバグの原因になっちゃうようなプログラムはやっぱりよくないなと。
しかも、これってソース書くのが面倒なだけって理由で書くコードでしょ?
俺的には駄目。ちゃんと一つ一つ代入すればこういう危険なことが起こらないんだからそこはちゃんとする。
ちゃんとできることをちゃんとやらないってだけで、どれだけ面倒なことを減らせるかってのは
俺の経験でかなりでかいことがわかってるからこういうのは駄目。
0198デフォルトの名無しさん
2005/09/17(土) 10:23:31自身を最背面に移動するコードを教えて下さい。
0199デフォルトの名無しさん
2005/09/17(土) 10:28:43そもそも構造体の順序を変えるなんてことをするからいけないといってみるテスト。
0200198
2005/09/17(土) 10:28:57で良いですか?
0201デフォルトの名無しさん
2005/09/17(土) 10:33:37メンバの順序変えることなんてあるかなぁ?
メンバを外に晒してるなら、インターフェースと同じ様に
後から変更加えるようなことしちゃマズイと思うけど。
0202デフォルトの名無しさん
2005/09/17(土) 10:33:51>ただ、構造体の要素の定義の順序がバグの原因になっちゃうようなプログラムはやっぱりよくないなと。
つまり、構造体をそのままファイルストリームにバイナリとしてロード/セーヴするコードの存在意義を全て否定するわけだね。
0203デフォルトの名無しさん
2005/09/17(土) 10:40:06> 俺は初期化と代入なんて垣根はどうでもいいと思ってるよ。
C++使っててそんなこと言う奴は勉強のやり直しが必要。
Cだけしか使わない人ならまだ許せるけど。
0204デフォルトの名無しさん
2005/09/17(土) 10:40:57それが周りからどう見えるかが気にならない人は。
0205デフォルトの名無しさん
2005/09/17(土) 10:45:11もし、それをやっちゃうにしても、
それをしてはいけないということをどこかに書いておかなきゃいけないでしょ?
そういうの書く手間を考えたら1つ1つ代入するのが面倒だからなんて発言でないと思うんだけど。
>>202
実際、役に立たないっしょ。
要素に関連項目があっても追加をするには下へ追加していかなくちゃならないし。
なにより変更に激弱で全く役に立たない。
0206デフォルトの名無しさん
2005/09/17(土) 10:45:53いや、早合点すんな。
この問題でってことだよ。
0207デフォルトの名無しさん
2005/09/17(土) 10:51:49それはさておき、X11ではこんなことがあった。
GCという構造体があるのだが、この内部の仕様は公開されていたがアプリケーションが直接設定してはいけないとされていた。
勿論そのため、内部の値を設定/取得する関数が公開されていた。
いくつかは忘れたが、あるリビジョンからその内部構造が見えないようにインクルードファイルが変更された。
つまりこの場合では、内部構造に依存するようなコードは変更を余儀なくされた。
この例では、確かに「構造体の内部仕様が変更されたら動かなくなるコード」がよくなかったように見える。
しかし問題は、「アプリケーションが直接設定してはいけない」という仕様を無視したことに問題があるわけで、
WinAPIなどのように内部に直接値を設定しておかなければならない仕様とは根本から違う。
0208デフォルトの名無しさん
2005/09/17(土) 10:58:01それは新しく構造体やインターフェースを作る側の話だろ。
既に構造体が宣言順も含めてインターフェースとなっている
Windows & C/C++ 環境でプログラミングする側の話と、噛み合ってないぞ。
0209デフォルトの名無しさん
2005/09/17(土) 11:12:26いや、だから、「それってどうよ?」ってのが今の話題なんジャマイカ?
0210デフォルトの名無しさん
2005/09/17(土) 11:15:27>既に構造体が宣言順も含めてインターフェースとなっている
なっていても変更される可能性は残されているよね?
0211デフォルトの名無しさん
2005/09/17(土) 11:32:03でも、めったにないことまで考えてややこしいコードを書くのもど
うかと思う。
構造体への個別代入はトレードオフのグレーゾーンだから結論は出
ないと思う。
どっちがより良いかは、プログラマーの性格や環境に依存するからな。
個人なら、自分の好きなように書けば良いし、プロジェクトならコー
ディングルールで決めておけば良い。
とにかく、結論は一つだ。
「自分の好みを人に押し付けるな。」
0212デフォルトの名無しさん
2005/09/17(土) 11:32:14そんな話なら「今ならもっといい仕様にできたかもしれないね」
って話になっていいかげんにスレ違い。
>>210
それによる混乱は変更した奴、または元のインターフェース決めた奴の責任。
構造体が仕様として公開されてるなら、
使う側がメンバの並びに依存することは問題ではない。
0213デフォルトの名無しさん
2005/09/17(土) 11:35:03じゃあ、君は仕事でそうやって説明するといいよ。
他の人のプログラムは動いてる中でね。
0214デフォルトの名無しさん
2005/09/17(土) 11:51:02ちょっと聞かせてほしい。
たとえば Point 構造体がこんなふうに定義されてて、
struct Point { int x,y; };
なんかの座標データのテーブルを持っておこうと思ったら、
普通こんな感じになると思うんだ。
Point const table[] = {{1,2},{3,4},{5,6}};
でもこのコードじゃぁ struct Point { int y,x; }; という変更に耐えられない。
君ならどう書くのかな?
0215!213
2005/09/17(土) 12:01:51だからそのstruct Point { int y, x; };という変更が起こることがありえないと散々書かれていただろ。
普通は少なくとも過去との互換性という名目の下に古いPointも(しばらくは)使えるようにするはずだ。
まあ答えになっていないと言われそうだが。
0216デフォルトの名無しさん
2005/09/17(土) 12:05:130217デフォルトの名無しさん
2005/09/17(土) 12:16:47昔、それと同じ問題でモデリングソフトからのデータのY軸とZ軸が
自分のプログラムの座標系とひっくりかえってて
struct XYZ{float x,z,y;};
って定義して変換して大変な目にあった、馬鹿な同僚がいたのを思い出したw
>>214
ヒント:マクロ
0218デフォルトの名無しさん
2005/09/17(土) 12:18:05マクロでどうにかなるの?
0219213
2005/09/17(土) 12:21:42長いことゲームのプログラム扱ってて
座標とかのプログラムはなれてる方だと思うけど、
そんな状況はほとんど無いからやったこと無い=考えたことも無い。ってのが正直なところ。
0220デフォルトの名無しさん
2005/09/17(土) 12:22:46217 じゃないけど、こういうことじゃねーの?
#ifdef OLD_SYSTEM
#define POINT_DATA(x,y) {(x),(y)}
#else
#define POINT_DATA(x,y) {(y),(x)}
#endif
Point const table[] =
{
POINT_DATA(1,2),
POINT_DATA(3,4),
POINT_DATA(5,6),
};
0221デフォルトの名無しさん
2005/09/17(土) 12:42:27何、それ、どうなってんの?w
0222デフォルトの名無しさん
2005/09/17(土) 12:45:54なんだそのDirectXはw
0223デフォルトの名無しさん
2005/09/17(土) 12:45:58それならPointかその派生クラスにコンストラクタをつければいいだけじゃないか。
0224デフォルトの名無しさん
2005/09/17(土) 12:48:25Class B
{
static __m128i ( B::*Test[] )( int n );
__m128i TestA( int n );
};
__m128i B::TestA( int n )
{
//省略
}
__m128i ( B::*B::Test[] )( int n ) =
{
&B::TestA, // c2440
};
error C2440: 'initializing' : cannot convert from '__m128i (__thiscall B::* )(int)' to '__m128i (__thiscall B::* )(int)'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
戻り値がintの時は問題なかったのですが、
この場合は、__m128i(union)だからなのでしょうか?
0225デフォルトの名無しさん
2005/09/17(土) 12:54:38それいいと思ってやってるの?
悪趣味なコードだな。
0226デフォルトの名無しさん
2005/09/17(土) 13:06:170227デフォルトの名無しさん
2005/09/17(土) 13:15:080228デフォルトの名無しさん
2005/09/17(土) 13:20:260229デフォルトの名無しさん
2005/09/17(土) 13:25:570230224
2005/09/17(土) 14:34:17お邪魔しました。
0231デフォルトの名無しさん
2005/09/17(土) 21:12:43こういう偏屈なボスがいると先細りだね
0232デフォルトの名無しさん
2005/09/17(土) 23:08:24いや社会経験ゼロの脳内PGだと思われ。
0233デフォルトの名無しさん
2005/09/18(日) 14:42:47猫でもわかるのページの C++のページの26章のファイルの入出力のところで
実行するとファイル名は入力してファイルができるのですが文字が書きこめません。
解かる方教えていただけないでしょうか?
0234デフォルトの名無しさん
2005/09/18(日) 14:44:57猫でもわからない人は猫以下スレへ
0235デフォルトの名無しさん
2005/09/18(日) 14:45:550236デフォルトの名無しさん
2005/09/18(日) 14:47:43申し訳ありませんでした。
0237どりーむ
2005/09/18(日) 15:11:27うまい事いきません。
もし足りない所があれば助言よろしくおねがいします。
コード
struct MovieItem{
long callNo;
char title[50];
bool status;
int frequency;
MovieItem *next;
};
0238どりーむ
2005/09/18(日) 15:12:34if(!in.is_open()){
cerr << "\nInput file" << file << " does not exist\n" << endl;
cerr << "Please check your file.\n" << endl;
exit(1);
}
while((ch=in.peek())!= EOF){
tempITEM.callNo = 0;
strcpy(tempITEM.title, " ");
in >> tempITEM.callNo;
in.getline (tempITEM.title,sizeof(tempITEM.title),';');
tempITEM.status = true;
tempITEM.frequency = 0;
in >> tempITEM.status;
in >> tempITEM.frequency;
addResult = MS.addNode (tempITEM);
if(addResult != 0){
if(addResult == -1){
cout << "Memory overflow adding movie\a\n";
exit (120);
}else{
cout << "Duplicate year: " << tempITEM.callNo << " not added\n\a";
}//Second IF
}// First IF
} // while
in.close();
0239デフォルトの名無しさん
2005/09/18(日) 15:12:34http://pc8.2ch.net/test/read.cgi/tech/1126948198/
こっちでやれ
0240どりーむ
2005/09/18(日) 15:13:16すいません。
0241デフォルトの名無しさん
2005/09/18(日) 19:07:35つーか猫の事はそこのHPで聞けよ
0242デフォルトの名無しさん
2005/09/18(日) 21:23:220243デフォルトの名無しさん
2005/09/19(月) 00:21:55文字列を外部から入力するのに
char *p;
gets(p);
ってやるとおかしな動作したりするんだけど
どうしてですか?僕が思うにメモリの確保とかそこらへんに
問題があると思うんですけど
char str[80];
char *p = str;
gets(p);
ってやらないと駄目かなぁ
0244デフォルトの名無しさん
2005/09/19(月) 00:29:11ん
う こ
0245デフォルトの名無しさん
2005/09/19(月) 00:32:22そのとおり。
char *p;と宣言してもpはどこかを指せるというだけで、まだどこのメモリも指していない。
あとgets使うな、fgets使え。
0246デフォルトの名無しさん
2005/09/19(月) 00:35:03わかりました!即レス感謝です。
0247デフォルトの名無しさん
2005/09/19(月) 10:32:170248デフォルトの名無しさん
2005/09/19(月) 10:34:25google getsを使うな
0249デフォルトの名無しさん
2005/09/19(月) 10:34:56別にgets()使ってもええよ。但し自己責任でな。
0250デフォルトの名無しさん
2005/09/19(月) 10:36:27google getsを使うな だが実践は違う。
0251247
2005/09/19(月) 10:40:280252デフォルトの名無しさん
2005/09/19(月) 10:43:31実践?
0253デフォルトの名無しさん
2005/09/19(月) 10:45:030254デフォルトの名無しさん
2005/09/19(月) 10:46:55/´⌒´⌒\
/ 〃 ハ ヾヽ
| ノ∠、ノ,ムヾ |
(|| ━` i ━ ||)
∩{ r ┘ 、 }∩
_|└9 k='=ヶ} 6┘|_
/ にニ}、_ ̄´_/にニ} \
|ヾ トーイ{≫又≪}ト―イ 〃 |
0255デフォルトの名無しさん
2005/09/19(月) 11:22:030256デフォルトの名無しさん
2005/09/19(月) 13:19:39他人に見せたり、配布してはいけません。
0257デフォルトの名無しさん
2005/09/19(月) 15:18:13バグ
通常、次の入力行がある任意の長さより短いことを保証するのは不可能であり、
また入力バッファをオーバフローするとほぼ必ずセキュリティ違反となるため、
プログラムでは gets() を 絶対に使用しないでください。 gets() は、 ISO/IEC
9899:1990 (``ISO C89'') に適合するためだけに存在しています。
まあ
char str[BUFSIZ];
fgets(str, sizeof(str), stdin);
とかやっとけ
0258デフォルトの名無しさん
2005/09/19(月) 19:58:47ある要素を指しているite1が、ite2の前に新しく要素を挿入した後も、
引き続き同じ要素を指しているようにするには、
if (ite1 == ite2)
ite1 = list.insert(ite2, p); // ite1が宙ぶらりんにならないように
else
list.insert(ite2, p);
とすりゃいいいんだよね?
0259デフォルトの名無しさん
2005/09/19(月) 20:03:15STL専用スレがあるんじゃー。
http://pc8.2ch.net/test/read.cgi/tech/1116559700/
0260258
2005/09/19(月) 20:05:460261デフォルトの名無しさん
2005/09/19(月) 20:07:06list.insert(ite2, p) で十分だと思うが。
何を心配してるの?
0262デフォルトの名無しさん
2005/09/19(月) 20:08:46そのスレは重複という話もある。↓こっち使って欲しい。
http://pc8.2ch.net/test/read.cgi/tech/1124113879/
0263デフォルトの名無しさん
2005/09/19(月) 20:14:10STLの話題だけでも結構多いから、俺はC++でまとめなくてもいいと思うよ。
C++ってーとやっぱりこっちも入っちゃうじゃん。
STLばっかり散りばめられるとさすがに読み難いからよ。
なにせこの言語、話題が多いし、仕様が変だし。
0264デフォルトの名無しさん
2005/09/19(月) 20:20:420265258
2005/09/19(月) 20:37:00とにかく疑問は解消した。ありがと。
0266デフォルトの名無しさん
2005/09/19(月) 21:09:51いや、話題が多いからわけようって話なんだけど?
大きく複雑なものは、小さく単純な形にわけること。
これはプログラムの極意だよ。
0267デフォルトの名無しさん
2005/09/19(月) 21:18:22わけるには明確に区別可能であることが必要じゃないのか?
0268デフォルトの名無しさん
2005/09/19(月) 21:27:06いいじゃん。とりあえずSTLとそれ以外で。
この辺は厳密じゃなくてもわかりゃいいでしょ。
0269デフォルトの名無しさん
2005/09/19(月) 21:29:540270デフォルトの名無しさん
2005/09/19(月) 21:30:29わかんないから問題なんだろ。 string とか iostream とかな。
0271デフォルトの名無しさん
2005/09/19(月) 21:34:38日本語わかんない猿なの?
テキトーでいいっていってるだろ。
年がら年中そんなどっちか微妙な質問ばっかり飛び交うわけじゃねぇんだ。
分かる奴が誘導してやるか、ちょうど分かる話題だったらその場で即答で解決すりゃそれでいいだろ。
0272デフォルトの名無しさん
2005/09/19(月) 21:37:080273デフォルトの名無しさん
2005/09/19(月) 21:46:520274デフォルトの名無しさん
2005/09/19(月) 21:48:460275デフォルトの名無しさん
2005/09/19(月) 21:51:530276デフォルトの名無しさん
2005/09/19(月) 21:56:32説明しよう。
適切なスレに誘導するのがスレの仕事だが、
この場合(>258)どっちのスレに誘導するべきか、という話。
"STL"という曖昧さをもった呼称(参照:>264)による区別をやめよう、というものと、
曖昧なままでもいいじゃないか、というものが言い争っている。
0277デフォルトの名無しさん
2005/09/19(月) 21:58:510278デフォルトの名無しさん
2005/09/20(火) 02:50:58宜しいのでしょうか。
int test( void (*pFunc)(int, int, int ,int) ); を
int test(FUNC *pFunc); 等と簡潔に記述出来ると嬉しいのですが。
0279デフォルトの名無しさん
2005/09/20(火) 02:53:17typedef void (*FUNC)(int, int, int, int);
int test(FUNC pFunc);
0280デフォルトの名無しさん
2005/09/20(火) 02:55:580281デフォルトの名無しさん
2005/09/20(火) 06:50:560282デフォルトの名無しさん
2005/09/20(火) 15:17:02関数の引数だけだな。
0283デフォルトの名無しさん
2005/09/20(火) 22:21:47argってのはargumentのことだとおもうんですけど、cとvはなんの略なんでしょうか?
気になったんですけど、考えてもハマる単語がでてきません
0284デフォルトの名無しさん
2005/09/20(火) 22:28:19value
0285デフォルトの名無しさん
2005/09/20(火) 22:32:16なるほど!スッキリした!
0286デフォルトの名無しさん
2005/09/20(火) 22:51:46カリ引数の名前なんて何でもいいんだよ
argc, argvとか付けたのは蟹版とか金持とかだろ
奴らのセンスのなさをあざ笑ってやれ
「だっせーcreat()って何県の言葉?create()にしたってギリギリ6文字じゃん」
みたいな
おっとこれは違う話だった
0287デフォルトの名無しさん
2005/09/20(火) 22:54:10COBOLerに刺されそうだな
0288デフォルトの名無しさん
2005/09/20(火) 23:17:36そんなこと誰も聞いてない。
0289デフォルトの名無しさん
2005/09/20(火) 23:26:46case "文字列":
文;
break;
case "文字列":
・
・
・
って感じで。
なんか出来ないっぽいんですけど
0290デフォルトの名無しさん
2005/09/20(火) 23:29:390291デフォルトの名無しさん
2005/09/20(火) 23:42:380292デフォルトの名無しさん
2005/09/20(火) 23:45:06関係ないですけど、僕、switch文つかう時いつもswichって
スペル間違えちゃうんですよね^^
0293デフォルトの名無しさん
2005/09/20(火) 23:48:410294デフォルトの名無しさん
2005/09/20(火) 23:52:42俺は母ちゃんの奴隷じゃないんだっちゅーの
0295デフォルトの名無しさん
2005/09/20(火) 23:56:01>>294が母ちゃんの奴隷であることはtrue(真)ですがな
0296デフォルトの名無しさん
2005/09/21(水) 01:23:510297デフォルトの名無しさん
2005/09/21(水) 01:45:14fopenで開きたいのですがどうすればいいのかわかりません。
どなたか御存知でしたら御教授お願い致します。
スレ違いだったらすみません…。
0298デフォルトの名無しさん
2005/09/21(水) 02:03:26普通は同じディレクトリに置いて読むと思うけど、それじゃダメなの?
つか、実行ファイルに埋め込む意図がわからない。
実行ファイルに埋め込むくらいなら、ソース中でテーブル定義した方が良いかと。
0299デフォルトの名無しさん
2005/09/21(水) 02:04:09データをタブ文字で区切って並べたファイル形式。
主に表計算ソフトやデータベースソフトがデータを保存するときに使う形式だが、
カンマ区切り形式(CSV)で保存されたファイルと同様に汎用性が高く、多くの電子
手帳やワープロソフトなどでも利用できる。このため、異なる種類のアプリケー
ションソフト間のデータ交換に使われることも多い。実体はテキストファイルで
あるため、テキストエディタやワープロなどで開いて直接編集することも可能。
...そのまま開けよw
0300デフォルトの名無しさん
2005/09/21(水) 02:20:00大体300行6列ぐらいのテキストです。まあ、もう少し調べてみます。
駄目だったら拡張子変えて読み取り専用にしてごまかすかな…。
0301デフォルトの名無しさん
2005/09/21(水) 02:33:300302デフォルトの名無しさん
2005/09/21(水) 02:33:44TSVは所詮テキストだからSTRINGリソースとして入れることも考えられるが、
その場合は改行を\r\nのように記述しなければならない。
リソースを読むにはfopen()ではなく、
FindResource(), LoadResource(), LockResource()のようなAPIを使う。
どーしてもfopen()で読みたければ、fopen()で実行モジュールを開き、
「自分で」リソースヘッダを検索することになるが、馬鹿馬鹿しいから
そんなことはしないように。
詳細は ttp://wisdom.sakura.ne.jp/system/winapi/win32/win75.html
でも参照のこと。
0303デフォルトの名無しさん
2005/09/21(水) 02:39:42使い方がよくわからないので勉強してみます。
0304デフォルトの名無しさん
2005/09/21(水) 02:40:51>>302
ありがとうございます。早速調べてみます。
0305デフォルトの名無しさん
2005/09/21(水) 02:46:060306デフォルトの名無しさん
2005/09/21(水) 02:48:05別に数値とは限らないのジャマイカ?
0307デフォルトの名無しさん
2005/09/21(水) 03:06:22今丁度拡張子の分岐に
if (StrComp(sExt, "GZ"){
} else if (StrComp(sExt, "ZIP"){
} else if (StrComp(sExt, "LZH"){
}
等と書いていて、もの凄く不毛に感じた所なのですが。
拡張子程度なら、4バイトを数値扱いしてswitchで分岐しても
良いんですかね。
0308デフォルトの名無しさん
2005/09/21(水) 03:27:08凝りたければ色々テクニックは考えられるが、if/elseが
一番愚直で普通な方法だよ。
ま、それが嫌なら、有りがちなのはテーブル用意することかな。
struct tbl_t { char *name, void (*fn)(void *arg) } tbl = {
{ "gz", gz_func },
{ "zip", zip_func },
:
{ 0, 0 }
};
みたいにしといて、
for (tbl_t *p = tbl; p; ++p)
if (!stricmp(ext, p->name))
(*p->fn)(arg);
みたいにやる。
0309デフォルトの名無しさん
2005/09/21(水) 04:00:45DWORD dwExt=0;
for (l=0; l<4; l++) if (!sExt[l]) break;
for (n=0; n<l; n++) dwExt|=sExt[n]<<(l-n-1)*8;
switch(dwExt){
case 'ZIP': case 'LZH': case 'GZ':
break;
case 'BMP': case 'PNG': case 'JPG': case 'JPEG':
break;
}
GCCではマルチキャラクター云々と警告が出ましたが、
とりあえず動いた・・・けど良いのかな。
0310デフォルトの名無しさん
2005/09/21(水) 04:02:42それだと最初の1文字しか判定に使われてないと思うよ。
この場合はかぶってないから動くだろうけど
0311デフォルトの名無しさん
2005/09/21(水) 04:06:23警告出るから、あまりやってはいけない事なんですかね。
0312デフォルトの名無しさん
2005/09/21(水) 07:18:510313デフォルトの名無しさん
2005/09/21(水) 08:26:420314デフォルトの名無しさん
2005/09/21(水) 15:55:11gcc(RHEL), MinGW(Win), Visual Studio .NET(Win)の各環境でC++を使って私用ミニツールなど
を作ったりして仕事してる、一介の営業マンです。最近はサービスでお客さん用のツールなんか
も作ったりし始めました。SE受注減らしてどうするんだって感じですが。
C/C++でのpthreadに関する質問です。
pthread_createでガーっと並列にスレッドを作って仕事をさせ、pthread_joinを回して終了を待つわけな
のですが、
pthread_joinはブロックするので、先頭のスレッドが長引いちゃうと後に続くスレッドが先に終わってても
ボケーっと待ってしまいますよね。
これを、スレッドが終了した順に処理する方法ってありますでしょうか?
よろしくお願いします。
0315デフォルトの名無しさん
2005/09/21(水) 16:29:08これに代わる似たような使い方ってありますか?
#defineだとスコープが広くなってしまうので。
0316デフォルトの名無しさん
2005/09/21(水) 16:30:490317デフォルトの名無しさん
2005/09/21(水) 16:36:44switchにenumって使えなかったっけ?
0318ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/21(水) 16:38:21マルチスレッドプログラミング相談室 その3
http://pc8.2ch.net/test/read.cgi/tech/1098268137/
0319デフォルトの名無しさん
2005/09/21(水) 16:53:22enumした識別子をそのままcaseに書けばいいじゃん
0320デフォルトの名無しさん
2005/09/21(水) 21:45:510321デフォルトの名無しさん
2005/09/21(水) 21:47:140322デフォルトの名無しさん
2005/09/21(水) 22:01:44定義されていないと出て使えません。
VK_HOMEとかVK_UPとかは使えるのですが、
何か別途インクルードなどしないといけないのでしょうか。
0323デフォルトの名無しさん
2005/09/21(水) 22:13:40StdAfx.hのWINVERかWINNTかWINDOWSマクロで定義されている
バージョンが違うせいだ。
0324デフォルトの名無しさん
2005/09/21(水) 22:14:10マクロはただの置換だから、スコープ云々は関係ない
さらに言うと、enum定義もスコープは関係ない
#define DEF_HOGE 3
enum{
ENUM_HOGE = 3,
};
とした場合、以下は全く同じ物。
case 3:
case DEF_HOGE:
case ENUM_HOGE:
0326デフォルトの名無しさん
2005/09/21(水) 22:42:07WINVERが0x500じゃないと駄目なんてのもあるしな。
0327デフォルトの名無しさん
2005/09/21(水) 22:43:20namespaceの事を言いたかったんではなかろうか?
0328デフォルトの名無しさん
2005/09/21(水) 23:07:40定義されてる名前が違うから定義されてないと出るのは当たり前
PageUpはVK_PRIOR、PageDownはVK_NEXT
>>323
もうちょっと良く調べようや?
0330デフォルトの名無しさん
2005/09/22(木) 04:34:380331デフォルトの名無しさん
2005/09/22(木) 04:39:48そうすると、俺ってばここ数年は素敵過ぎっぱなし。
0334デフォルトの名無しさん
2005/09/22(木) 07:07:14自称釣り師はお帰りくださいな
0335デフォルトの名無しさん
2005/09/22(木) 13:58:33ちょっとした処理をラップしたいときに、
マクロ、インライン関数のどちらにするべきか迷っています。
(コンパイラはインライン関数をサポートしています)
関数をマクロ化するのと、インライン関数化するのでは
型チェックをする以外に何か大きな違いはありますか?
0336デフォルトの名無しさん
2005/09/22(木) 14:03:10俺ならインライン関数でできることはインライン関数にする。
あと、インライン関数なら必然的にブロックを作ることになるので、
何も考えずともローカル変数を宣言できる。
0337デフォルトの名無しさん
2005/09/22(木) 14:05:440338デフォルトの名無しさん
2005/09/22(木) 14:09:250340デフォルトの名無しさん
2005/09/22(木) 15:43:10インライン関数はC99だから、まだ移植性が無い点に注意だ
移植性が大事なら、マクロにしといたほうが無難
0341デフォルトの名無しさん
2005/09/22(木) 15:57:44リリースだと不特定の場所でアプリケーションエラーが起きてしまいます。
色々コメントアウトしていって確認した所、
下記のコードをコメントアウトするとリリースでも正常に動くようになりました。
下記のコードは不正な処理なのでしょうか?
char chStr[1];
//strReadはCString文字列(2バイト文字の場合もあり)
strcpy( chStr, strRead.Left(1) );
0342デフォルトの名無しさん
2005/09/22(木) 16:01:171バイトしか確保してないところに2バイト入れてるからじゃないの?
0343デフォルトの名無しさん
2005/09/22(木) 16:01:59ヒントをあげよう
[NullTerminatedString]
[NULL終端文字列]
0344デフォルトの名無しさん
2005/09/22(木) 16:02:560345デフォルトの名無しさん
2005/09/22(木) 16:21:190346341
2005/09/22(木) 16:46:36すいません、strReadですが2バイト文字が入る可能性は無かったです。
>>343
NULL終端文字列とやらを調べてみたのですが、イマイチ分かりません。
よくわからないのですが、下記のように直したら正常に動きました。
下記の処理だと問題ないんでしょうか?
char chStr[1];
//strReadは
chStr[0] = strRead.GetAt(0);
//strcpy( chStr, strRead.Left(1) );
0347デフォルトの名無しさん
2005/09/22(木) 16:48:48・strRead.GetAt()がどのような関数であるかわからないと、何とも言えない。
・chStr[]がプログラム中でどのような働きをしているかわからないと、何とも言えない。
0348デフォルトの名無しさん
2005/09/22(木) 16:52:280349デフォルトの名無しさん
2005/09/22(木) 16:53:38strcpyはコピー先の末尾に文字列の終端の印として'\0'を書き込む。
だからchStrにstrcpyで1文字書き込むならchStrの要素数は少なくとも2以上必要になる。
chStr[0] = strRead.GetAt(0);とするのは間違っていないが、そもそも要素数1なのでchStrは配列にする必要がない。
>>348
同感。
0350341
2005/09/22(木) 17:03:25どうもありがとうございます。
>strcpyはコピー先の末尾に文字列の終端の印として'\0'を書き込む。
ということを知りませんでした。
chStrも確かに配列にする必要もないですね。
勉強不足のようですいませんでした。
0351デフォルトの名無しさん
2005/09/22(木) 18:00:59にstrcpy(3)の日本語マニュアルがあるが……
この訳は糞だな。
見ないほうがいい。
0352デフォルトの名無しさん
2005/09/22(木) 18:01:23お前、C言語の入門書もロクに目を通してないだろw
サンプルコードなぞることすらやってない臭いがするw
0353デフォルトの名無しさん
2005/09/22(木) 18:18:33原文の修飾関係を完全に読み誤ってるな
プログラミング何もしらない奴が訳したのか?って思える出来
素直にCygwinなりLinux実機なりでman使った方が数百倍マシ
0354デフォルトの名無しさん
2005/09/22(木) 18:24:37http://www.microsoft.com/japan/msdn/columns/secure/secure05202002.asp
0355デフォルトの名無しさん
2005/09/23(金) 00:40:06何が知りませんでしただ。
なさけない・・・
0356デフォルトの名無しさん
2005/09/23(金) 01:30:39いや、このレベルのことすら知らないのはC言語の入門書の
サンプルコードすら打って無いレベルだよ。
普通は入門書にね、文字列をいじるコードがちょっとはあるはずだから。
0357デフォルトの名無しさん
2005/09/23(金) 02:04:25このスレの質問は1/10以下に減るでしょ。
0358デフォルトの名無しさん
2005/09/23(金) 02:16:56入門書って?
0359デフォルトの名無しさん
2005/09/23(金) 02:38:270360デフォルトの名無しさん
2005/09/23(金) 07:57:29ttp://www.winapi-database.com/System/Time/GetLocalTime.html
のサイトからコードをコピーしてVCで「ソリュージョンのビルド」をしたのですが
エラーがでて動きません。
どなたかご教授お願い致します。
VOID GetLocalTime(
LPSYSTEMTIME lpSystemTime
);
でたエラーはこれです。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp error C2146: 構文エラー : ';' が、識別子 'GetLocalTime' の前に必要です。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp error C2501: 'VOID' : 識別名を宣言するのに、型が指定されていません。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp(2): error C2065: 'LPSYSTEMTIME' : 定義されていない識別子です。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp(3): error C2146: 構文エラー : ')' が、識別子 'lpSystemTime' の前に必要です。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp(3): error C2501: 'GetLocalTime' : 識別名を宣言するのに、型が指定されていません。
c:\Documents and Settings\user1\My Documents\Csample\test\test.cpp(3): error C2059: 構文エラー : ')'
0361デフォルトの名無しさん
2005/09/23(金) 08:07:38とりあえず本を一冊くらい読めって・・・
0362デフォルトの名無しさん
2005/09/23(金) 08:36:20エラーの出た場所の見直しくらいしてから来い
0363デフォルトの名無しさん
2005/09/23(金) 08:38:270364デフォルトの名無しさん
2005/09/23(金) 08:41:06場所やプロトタイプ云々の前に、行数を見た感じ・・・
0365デフォルトの名無しさん
2005/09/23(金) 10:01:28ひさびさに噴いたw
0366デフォルトの名無しさん
2005/09/23(金) 10:07:04ダイアログベースアプリで以下の個所で異常が発生して「TODOうんたらかんたらマイクソソフトに送信しますか?」
となってしまいます。
CString str;
m_Edit.GetWindowText( str ); ←ココ
VCの入ってるマシンでは起きません。VCの入ってないマシンにMFC71.DLLやMFC71JPN.DLL等をコピーして
動かしています。なぜここで異常が起きたかわかったかというと、GetWindowText()の前後に
ファイルにログを出すようにしてて、GetWindowText()の前までしかログが出てなかったからです。
で、実は以下のようにしたら異常が出なくなりました。
CString str;
str.Empty();
m_Edit.GetWindowText( str );
GetWindowText()の中を見たらCStringのGetBuffer()とかReleaseBuffer()をやってたんでEmpty()を呼ぶように
してみたんですが、なぜかこれで改善されました。
しかし宣言したばかりのCStringを引数に使うことってよくあると思うんですよ。
なぜEmpty()を入れないといけないのでしょうか? それともEmpty()を入れたら異常が起きにくくなってるだけ
なのでしょうか?
0367デフォルトの名無しさん
2005/09/23(金) 10:13:08マウスの座標をプログラム側で操作することは可能でしょうか
0368デフォルトの名無しさん
2005/09/23(金) 10:20:43コンソールアプリで、標準入力から値をもらう時オーバーフローが起こる時があるそうなので、調べて次のような関数をを作りました。
戻り値は*charです。
char bufs[LENGTH], *s,*rs;
s = bufs;
rs = fgets(s, LENGTH, stgin);
fflush(stdin);
return NULL != rs ? s : NULL;
今のところは問題なく動いていますが、危険な場所があれば教えていただけませんか?
0369デフォルトの名無しさん
2005/09/23(金) 10:54:56作ってわかるCプログラミング
0370デフォルトの名無しさん
2005/09/23(金) 11:03:520371デフォルトの名無しさん
2005/09/23(金) 11:15:22危険ではないけれど、bufsをsに代入するのは無駄。直接fgetsの引数にしてしまえ。
fgetsの戻り値はNULLか第一引数を返すとなっているからreturn rs;とだけ書けばいい。
0372デフォルトの名無しさん
2005/09/23(金) 11:29:030373デフォルトの名無しさん
2005/09/23(金) 11:29:25関数ローカルな変数へのポインタを返しちゃダメだよ。
0374368
2005/09/23(金) 11:31:17>>370
動作が処理系依存?のようですね。
あってもなくても動くので、様子を見ながら使おうと思います。
>>371
大変参考になりました。
ありがとうございました。
0375デフォルトの名無しさん
2005/09/23(金) 12:04:44釣りご苦労。
釣りじゃないなら、>373をよく読むように。
0376368
2005/09/23(金) 12:37:49ということは、関数の呼び出し元でchar配列を生成し、それを引き数に渡してそこに入れれば良い、ということでしょうか?
0377デフォルトの名無しさん
2005/09/23(金) 12:44:18ただし、ちゃんと解放しないといけないけどな
0378368
2005/09/23(金) 12:53:39ありがとうございました
0379デフォルトの名無しさん
2005/09/23(金) 13:09:03mouse_eventとかSendInputでお調べ
0380デフォルトの名無しさん
2005/09/23(金) 13:44:07> オーバーフロー
というよりは、要するに行が長くてfgets()で1行が読みきれなかった
場合の対策か?
その場合に単に行の残り(改行文字まで)を読み捨てたい、というのなら
fflush()では間違い。
そもそもfflush()のこうした使い方は規格上には保証されていないが、
それが動作する場合であっても、単に現在読み込み済みのバッファの
中身を空にするだけだ。
それ以上行が長ければ、次回はまた行の続きを読むことになる。
0381デフォルトの名無しさん
2005/09/23(金) 15:21:44setuid、setgid関数を使用して任意のユーザ権限で処理を実行するプログラムで、
環境変数HOMEを起動したユーザのホームディレクトリから任意ユーザのホームに変更するよう
setenv関数を使用したのですがHOMEの内容は変更されませんでした。これって仕様なのでしょうか??
0382デフォルトの名無しさん
2005/09/23(金) 15:48:43まず読点の使い方を学べ。
0383デフォルトの名無しさん
2005/09/23(金) 16:15:32>setenv関数を使用したのですがHOMEの内容は変更されませんでした。
どうやって調べた? 親プロセスの環境変数を変更することはできないぞ。
setenvしたプロセスと、そのプロセスの子プロセスの環境変数が変更されているはず。
0384デフォルトの名無しさん
2005/09/23(金) 17:27:16printf("あ\fい\fう");
としてみたら、"あ い う"とスペース?が入っただけでした。
どういう場面で使うものなのでしょうか?
0385デフォルトの名無しさん
2005/09/23(金) 17:38:51printfで何故そうなるかは
printfのマニュアルしらべて\fが何の効果になってるか調べてみればわかる。
0386デフォルトの名無しさん
2005/09/23(金) 17:41:47FF(FORM FEED)をプリンタ、特に昔のラインプリンタに出力すると紙送りが行なわれた。
今のプリンタは、普通はPDLでページ単位に出力するためフォームフィードが出力ページに
含まれていても特に何も起きないえでお。
0388デフォルトの名無しさん
2005/09/23(金) 20:13:33それは、dbxの子プロセスの環境を表示しているだけで、
デバッグ対象のプロセスの環境を調べているわけではない。
0389381
2005/09/24(土) 03:12:14setenv後にsystem関数でenvを実行してみたんですが結果は同じでした。
理想はsetuidしたユーザのホームディレクトリが環境変数HOMEに入ることなのですが
0390デフォルトの名無しさん
2005/09/24(土) 03:17:02>setenv後にsystem関数でenvを実行してみたんですが
この辺りのコードを具体的に。
0391デフォルトの名無しさん
2005/09/24(土) 05:07:30クラスAnimalから派生しかクラスがいっぱいあった場合、
vector < Animal * > table;
に色んなクラスのポインタを登録したいんですけど、
string name;
...
if (name=="inu") table.push_back( new Dog );
else if (name=="neko") table.push_back( new Cat );
else if (name=="buta") table.push_back( new Pig );
...
みたいのを
for(...){
if (name == classTable[i].name){ table.push_back( new classTable[i].class );break;}
}
みたいにすることって出来るでしょうか
もし出来るとしたらclassTable[].classはどういう型にしてどう初期化すればいいですか?
0392デフォルトの名無しさん
2005/09/24(土) 05:13:41これはまた危険な使い方を・・・
型縛りが嫌ならvoid*でも使えばいいんじゃね?
個人的にはオススメできない組み方だなぁ・・・
問題の本質は要するにプログラムが上手くないから型が邪魔になっちゃってるんだよね。
0393デフォルトの名無しさん
2005/09/24(土) 06:30:38俺のレベルじゃよくわかんないけど・・・
0394デフォルトの名無しさん
2005/09/24(土) 07:55:53#include<string.h>
#include<vector>
template<typename T>struct ClassTable{char*Name;T*(*New)();};
template<typename T,typename T2>T*New(){return new T2;}
struct Animal{virtual ~Animal(){}};struct Dog:Animal{};struct Cat:Animal{};
ClassTable<Animal>classtable[]={"Dog",New<Animal,Dog>,"Cat",New<Animal,Cat>};
enum{length=sizeof(classtable)/sizeof(classtable[0])};
int main(){
std::vector<Animal*>a;
char*Name="Dog";
for(int i=0;i<length;++i)
if(!strcmp(Name,classtable[i].Name))a.push_back(classtable[i].New());
}
0395デフォルトの名無しさん
2005/09/24(土) 08:12:08> string name;
> ...
> if (name=="inu") table.push_back( new Dog );
> else if (name=="neko") table.push_back( new Cat );
> else if (name=="buta") table.push_back( new Pig );
> ...
ここの部分で Factory パターン使えば済む話ではなくて?
0396391
2005/09/24(土) 08:25:06助かりました&勉強になりました。
教えていただけば「なるほど、そうだよね」なのですが、
自分ではどうやってもあと一歩が書けませんでした。
本当にありがとうございました。
0398デフォルトの名無しさん
2005/09/24(土) 09:13:34Factory パターンって何だよ。
Abstract Factory も Factory Method もあてはまらないぞ。
やりたいのは、名前を指定して対応するオブジェクトを作成することだろ。
0399デフォルトの名無しさん
2005/09/24(土) 09:33:440400デフォルトの名無しさん
2005/09/24(土) 12:59:47こうやってまとめる意味ってないと思うんだけど
結局、何がやりたくてこんなソースになるわけ?
0401394
2005/09/24(土) 13:10:190402381
2005/09/24(土) 13:35:40sprintf(userhome,"/home/%s",argv[1]);
setenv("HOME",userhome,1);
rtn=system("/usr/bin/env |grep HOME");
0403デフォルトの名無しさん
2005/09/24(土) 14:47:16最小単位の a.outを setuidとか dbx 無しに、じかに実行して確認しました?
AIX か。setenv(3)の引数の仕様を確認できないんだけれど(setenvあったっけ?)、
putenv() では確認しました?
つうか、system()とは別に getenv()くらい確認してみれば?
簡単なデバグや確認作業ができないのは問題だなあ…
>>381 例とかもいろいろ突っ込みたくなるが…
>setuid、setgid関数を使用して任意のユーザ権限で処理を実行するプログラムで、
初心者かどうかにかかわらず、今更素人がそんなプログラム書くのやめろよと…
0404TOM
2005/09/24(土) 17:24:27どうすればいいんですかね?
0405デフォルトの名無しさん
2005/09/24(土) 17:26:040406TOM
2005/09/24(土) 17:31:13intとかlongじゃあふれちゃいますよね・・。
配列とかにするってことですか?
よろしくです。
0407デフォルトの名無しさん
2005/09/24(土) 17:32:560408デフォルトの名無しさん
2005/09/24(土) 17:34:59とか。
初期化が面倒だけど
0409デフォルトの名無しさん
2005/09/24(土) 17:47:390410デフォルトの名無しさん
2005/09/24(土) 17:48:220411デフォルトの名無しさん
2005/09/24(土) 17:52:09レスありがとうございます。
今の案件落ち着いたら頑張ってまともなC言語書けるようにします。
0412デフォルトの名無しさん
2005/09/24(土) 17:58:09longって多くても64bitじゃなかったっけ?
0413デフォルトの名無しさん
2005/09/24(土) 18:01:060414デフォルトの名無しさん
2005/09/24(土) 18:16:21構成をReleaseにしたexeを起動すると
STLの map insert 3回目(for文で7回繰り返す予定)
で 「問題が発生したため〜」で止まってしまいます。
ですが、VC++の方でビルドすると、問題なく実行します。
MessageBoxをちょこちょこ追加しながら見てますが
mapに入れるデータには特に問題があるわけでもないです。
となると、mapに入れるのに失敗したという事なんでしょうか。
0415デフォルトの名無しさん
2005/09/24(土) 18:18:30>VC++の方でビルドすると
ha?
0416デフォルトの名無しさん
2005/09/24(土) 18:20:40さすがにソースコード無しじゃ分からんよ。
今言えるのは君のコードに問題があるだろうということくらい
0418デフォルトの名無しさん
2005/09/24(土) 18:30:10exeを実行するとダメだが、IDE上から実行するとOKって言いたいんじゃないのか?
0419デフォルトの名無しさん
2005/09/24(土) 18:31:27どちらかのみ配列が0クリアされるとか
違いがあったと思うけど、そこら辺が原因かな。
Debugの方がたまたま動いている感じで。
0420デフォルトの名無しさん
2005/09/24(土) 18:34:07<boost/cstdint.hpp>
0421デフォルトの名無しさん
2005/09/24(土) 18:39:24http://pc8.2ch.net/test/read.cgi/gamedev/1125306375/72
0422デフォルトの名無しさん
2005/09/24(土) 18:54:550423デフォルトの名無しさん
2005/09/24(土) 19:08:32std::bitsetって比較演算子定義されてたっけ?
0424403
2005/09/24(土) 20:25:47なんか誤解があるようなので。
質問したからには、せめて、普通にはありそうも無いこの現象が
何故起きたのか、種明かしは伝わるようにしてください。
そちらがまともなC言語書けるようになるかどうかは無関係ですし、
誰も関心が無いと思います。
(まともな設計やsetuid等の問題性の考察は言語とは別ですから)
0425414
2005/09/24(土) 20:38:13デバッグとリリース入れたら7Mになって弾かれた
>>419
mapに入れ込むと順番をずらす為に
中身がとりあえず消えるとかですか?
>>421
ソレです
ファイルは色々ありますが
Test.cpp
ReadMapFile.cpp
CMapObjet.cpp
の3つが主です。
もし宜しければ、問題点を指摘して頂ければ幸いです。
流れは プログラムの流れ.txt に書いておきました。
0426デフォルトの名無しさん
2005/09/24(土) 20:42:46あんたの頭。
プロジェクトを丸ごとアップロードする馬鹿がどこにいる。
0427414
2005/09/24(土) 20:44:27Test.exeはReleaseモードで作られた奴です
実行すると 「問題が〜」 が出ます。
0428416
2005/09/24(土) 20:44:40~~~~~
0430デフォルトの名無しさん
2005/09/24(土) 20:49:48余計手間だろうが
最小のソース抜き出せ、それができないなら止めろ
0431デフォルトの名無しさん
2005/09/24(土) 20:55:060432414
2005/09/24(土) 20:58:06もうちょっと削ってみます。
0433デフォルトの名無しさん
2005/09/24(土) 21:01:49これじゃね?。
dwSize=dwAccBytesしか確保してないのに・・・
0434デフォルトの名無しさん
2005/09/24(土) 21:57:21ご迷惑をお掛けしました。
さらに削ってみました。よろしくお願いします。
>>433
pszStr[dwAccBytes + 1]等
やってみましたが
そこでは無いみたいです。
mapへのinsert4回目でエラーが発生します
文字列、ファイル読み込みは問題ないのですが、何故だろう。
0435デフォルトの名無しさん
2005/09/24(土) 22:00:28+1て・・・
0436デフォルトの名無しさん
2005/09/24(土) 22:05:53うおおおい志村-1-1
0437414
2005/09/24(土) 22:07:240438414
2005/09/24(土) 22:13:37pszStr[dwAccBytes - 1]で解決しました。
読み込んだ文字列には問題が無かったもので
この辺はまったく考えてませんでした。
後、無知も災いしたようで。
しかし、3回も読み込めたのはいったい何だったのだろう?
どうも、お騒がせしました。アップしたファイルは消しておきます。
レス有難うございました。
0439デフォルトの名無しさん
2005/09/24(土) 22:16:170440デフォルトの名無しさん
2005/09/24(土) 22:17:12小手先だけじゃなくて、ちゃんと考えた方がいいぞ。
俺ならそこは足さない。
あえて答えは書かない。
0441デフォルトの名無しさん
2005/09/24(土) 22:18:140442デフォルトの名無しさん
2005/09/24(土) 22:20:240443デフォルトの名無しさん
2005/09/24(土) 22:22:140444デフォルトの名無しさん
2005/09/24(土) 22:23:12オレもメモリ確保を一桁ミスってるのに気づかず
4時間悩んだことがある
0445414
2005/09/24(土) 22:37:22すると消えますね@@;
ファイルは
最後に \r\n 入れてたので回避してましたが。
入れない方がよさそうだ。
(psz(略)を消しても問題なく動作しました)
0446デフォルトの名無しさん
2005/09/24(土) 23:00:19ユーザーが入力した数字を、それとは別に入力した回数だけ
累乗し、その結果を表示する、というプログラムをつくろうと思っています。
累乗のところをどうしたらいいか思いつかないのですが、
どうやればできるでしょうか。
どなたか回答お願いいたします。
0447デフォルトの名無しさん
2005/09/24(土) 23:05:15int n;
int p;
int r = 1; // r = n のp乗
for(int i = 1; i <= p; i++) {
r *= n;
}
0448デフォルトの名無しさん
2005/09/24(土) 23:21:44あるパス名が与えられたときに、それがファイルなのかディレクトリなのかを
調べる方法を探しています。
「C言語なら、俺に聞け! <21>」に、次のような記述がありました。
http://nssearch.hp.infoseek.co.jp/clang/1022045622.html
367 名前:デフォルトの名無しさん 投稿日:02/05/24 10:46
ディレクトリとファイルの判別するにはどうしたらいいのですか?
関数とかあれば教えてください。
379 名前:デフォルトの名無しさん 投稿日:02/05/24 13:01
>>367
標準ライブラリにはない。OS依存。
WinならGetFileAttributes(filename)&FILE_ATTRIBUTE_DIRECTORY
Unixならstat(filename, &stat_buf), S_ISDIR(stat_buf.st_mode)
私は、Borland のフリーのコンパイラを Win98 で使用しているのですが、この場合にも、
上記で示されているGetFileAttributesしか方法はないでしょうか。
(windows.h を include するようなプログラムを書いたことがないので、できれば避けたいのです。)
OS: Win98
Compiler: Borland C++ 5.5.1 for Win32
0449デフォルトの名無しさん
2005/09/24(土) 23:25:55読み取り専用でfopenしてみて失敗したらディレクトリで成功したらファイルというわけにはいかないのかな?
やったことないから上手くいくかわからない。
0450デフォルトの名無しさん
2005/09/24(土) 23:26:23ほかにも方法があるかもしれないが、まともな方法はどれも
初めて include するファイルが表れることだろう。
あ、 fopen が失敗して、且つ errno が EISDIR だったら、ディレクトリかもしれない。
0451デフォルトの名無しさん
2005/09/24(土) 23:27:10ありあがとうございます!やってみます。
0452デフォルトの名無しさん
2005/09/24(土) 23:28:28何の目的で調べるかによるな
単純にファイルかディレクトリかどうか調べるなら後ろに"\\nul"つけてオープンする手も有るよ
開けたらディレクトリで開けなきゃファイル
0453デフォルトの名無しさん
2005/09/24(土) 23:28:480454デフォルトの名無しさん
2005/09/24(土) 23:32:46とりあえずfp=fopen("ディレクトリのパス", "r")はfp==NULLだった。
0455448
2005/09/24(土) 23:42:23ディレクトリを fopen でわざと開いて失敗させて、 errorno を見たら、
#define EACCES 5 /* Permission denied */
でした。
よくわからないので、ここは勇気をもって、GetFileAttributes に挑戦してみようと思います。
(標準関数だけの世界じゃ生きていけないのかぁ。)
ありがとうございました。(うまく行ったら報告します。)
0456448
2005/09/24(土) 23:54:17参考にしたページ。ttp://nienie.com/~masapico/api_GetFileAttributes.html
#include <stdio.h>
#include <windows.h>
int main(int argc, char **argv) {
DWORD ret;
if (argc < 2) exit(1);
ret = GetFileAttributes(argv[1]);
if (ret & FILE_ATTRIBUTE_DIRECTORY) {
printf("directory.\n");
} else {
printf("not directory.\n");
}
return 0;
}
0457デフォルトの名無しさん
2005/09/25(日) 00:03:12ちょっとまった「標準関数の世界」って何を想定、意味しているつもりなの?
(標準入出力等ならともかく、file system等は C言語外の環境なので当然…)
0458デフォルトの名無しさん
2005/09/25(日) 00:17:32今ファイル操作やってるのですが
テキストファイルの文字の消去の仕方が分かりません
fputc('\0',file);
とかやっても変なデータが上書きされるだけで orz
初心者チックな質問ですがよろしくお願いします
0459デフォルトの名無しさん
2005/09/25(日) 00:20:26もちっと具体的に詳しく伝えて
どうしたいんで?
0460デフォルトの名無しさん
2005/09/25(日) 00:21:150461デフォルトの名無しさん
2005/09/25(日) 00:21:520462458
2005/09/25(日) 00:34:08えーと…何と説明すれば良いやら
テキストモードで書かれたファイル中の文字を削除したいんですよ
テキストデータを一行削除したときに一行ずつ上にずらしているので最後の行が二重になって余ってしまうんです
start
test
test
end
というデータで2行目を削除すると
start
test
end
end
となってしまい、最後の行を消したいのですが方法が分かりません
0463458
2005/09/25(日) 00:35:23" ↑"みたいのが入ってしまって意図通りに消えないってことで
下手くそな説明で申し訳ない orz
0464デフォルトの名無しさん
2005/09/25(日) 00:39:57手っ取り早いのは元のファイルは消して、新しく出力しなおす
0465デフォルトの名無しさん
2005/09/25(日) 00:46:08クラス内の関数をフックしたいのですが行き詰っています。
フックのサンプルみたいなものがあってLPDIRECTDRAW7のCreateSurfaceをフックしていたのですが
LPDIRECTDRAW7 lpdd; // DirectDrawCreateで作成済みのLPDIRECTDRAW7
void *pCreateSurface;
pCreateSurface = *(void **)(*(DWORD *)lpdd + 24);
*(void **)(*(DWORD *)lpdd + 24) = extCreateSurface;
こんな感じでフックしてたんですが、この行に出てくる24はどうも
lpddのアドレスからのCreateSurfaceへのオフセット値っぽいのですが
こんな風に作成されたクラスの仮想関数へのオフセット値を求める手段ってあるんでしょうか?
なんかよくわかんないまとめ方になってすいません。
0466458
2005/09/25(日) 00:46:51その方向で考え直してみます
回答ありがとうございました
0467デフォルトの名無しさん
2005/09/25(日) 01:14:12Unix/Linux なら、 truncate() とか ftruncate() 使えない?
Windows なら、 _chsize() かな。
0468デフォルトの名無しさん
2005/09/25(日) 01:34:35そいつはクラスじゃなくてCOMだ。
まあWindows環境のC++ではたいてい同じ構造になるんだけどな。
オフセットの求め方はないと思う。
宣言された順に+4ずつ増えてくから、自分で数えるしかないんじゃね?
0469デフォルトの名無しさん
2005/09/25(日) 01:42:590471デフォルトの名無しさん
2005/09/25(日) 03:24:11メモリ配置的には、基本クラスが先頭で、
次に継承した順に配置されるんでしょうか?
class CBase
{
public:
float value_base;
};
class CDerived : public CBase
{
public:
float value;
};
なら、
CBase* p;
CBase a;
p = &a;
p->value_base = 0.1f;
は有りですか?
0472デフォルトの名無しさん
2005/09/25(日) 04:00:40基本クラスが普通先頭で、先頭かどうかに関係なくそれは有りなんじゃ?
配置の説明は色々あるけど、これ読みやすかった
ttp://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/
0473デフォルトの名無しさん
2005/09/25(日) 06:29:43今日でようやく半年になりました。
おひさしぶりです。涙がでそうです。
0474デフォルトの名無しさん
2005/09/25(日) 07:12:020475デフォルトの名無しさん
2005/09/25(日) 07:16:170476デフォルトの名無しさん
2005/09/25(日) 07:23:01お前は一生ロムってろ
0477デフォルトの名無しさん
2005/09/25(日) 08:01:110478デフォルトの名無しさん
2005/09/25(日) 09:56:50やっぱり求める方法は無いんですかね…
宣言順が分からない事にはどうしようもないですねと思ったら
SDKのddraw.hに宣言順が書いてありました(´∀`)
解決できそうです。ありがとうございました。
>>469
offsetof(lpdd,lpdd->CreateClipper)みたいにしても
構文エラーになってしまって何故エラーになってるのか
わかりませんでした。とりあえず>>468さんの方法で
行ってみようと思います。ありがとうございました。
0479デフォルトの名無しさん
2005/09/25(日) 09:59:45offsetofは非静的メンバ変数にしか使えない。
0480デフォルトの名無しさん
2005/09/25(日) 12:28:07Inside The C++ Object Model でも読め。
0481デフォルトの名無しさん
2005/09/25(日) 15:49:36VC++6.0でデバッガを使いたいのですが、
Win32 Console Applicationのプログラムをステップ実行しながらデバッグできるのでしょうか。
コマンドプロンプトで、入力ファイル名・出力ファイル名を入力する仕様です。
それともprintfで値を出力しながらデバッグするしかないのでしょうか。
0482デフォルトの名無しさん
2005/09/25(日) 15:50:17google先生を始めとする検索エンジンに
「COMプログラミング」とか「COM プログラム」とかで探しても
何故かCOMだけいい感じに無視されてCOM関連のページを見つけることが出来ません。
0483デフォルトの名無しさん
2005/09/25(日) 15:51:24なぜ試さない?
0484481
2005/09/25(日) 16:02:05いきなり実行されて終了してしまうんです。
入力ファイル名などを入力することができずに。
(argc=3でないと終了する仕様。何故こうしたかは先人達の考えがあったと思うのですが。。。)
Visual Studioは初めて使うことになったので、設定等が分かりません。
0485デフォルトの名無しさん
2005/09/25(日) 16:05:30実行時のコマンドライン引数を設定をしろ
F1押して"実行時のコマンドライン引数"で探すべし
何を設定すべきかは前任者に聞く事
0487デフォルトの名無しさん
2005/09/25(日) 16:30:170488デフォルトの名無しさん
2005/09/25(日) 16:41:23F5じゃなくてメニューのデバッグの方から実行すれば
終了するには何かキーを押して下さいとか表示された気がする。
0489デフォルトの名無しさん
2005/09/25(日) 16:44:06止めたい所にブレークポイント入れとけば?
0490デフォルトの名無しさん
2005/09/25(日) 16:47:16開いたファイルの存在するディレクトリを得るためにまずコモンダイアログでOPENFILE型変数ofnを取得したのですが、
フルパスのファイル名ofn.lpstrFileは取得できているのにファイル名ofn.lpstrFileTitleがなぜか取得できないため
自作関数で行うことにしましたが、
エラー:error C2664: 'FolderName' : 1 番目の引数を 'OPENFILENAME' から 'char' に変換できません。
が出てしまっております。どうか助言をお願いします。
void FolderName(OPENFILENAME OpenFname)
{
int i = 0;
int k = 0;
while(OpenFname.lpstrFile[i])//フルパス最後の'\'は何文字目か取得する
{
if(OpenFname.lpstrFile[i] == '\\')
k = i;
i++;
}
i = 0;//iの初期化
while(i<k)//フルパスからファイル名を除いて全て書き込む
{
OpenFname.lpstrFileTitle[i] = OpenFname.lpstrFile[i];
i++;
}
}
0491デフォルトの名無しさん
2005/09/25(日) 16:49:04http://www.google.com/search?num=100&hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=%22COM%83v%83%8D%83O%83%89%83%7E%83%93%83O%22&lr=lang_ja
""を使えばOK
0492デフォルトの名無しさん
2005/09/25(日) 17:06:05lpstrFileTitleは領域確保してあるのか?
0493デフォルトの名無しさん
2005/09/25(日) 17:07:21うお、そんな技があったんですねっていうかMSDNにCOMの記事あったんですねorz
本当にありがとうございます!
0494デフォルトの名無しさん
2005/09/25(日) 17:32:00NULLのままなので領域確保はしていないみたいですね。
その領域確保はどうするのでしょうか。
関数をchar引数に変えてFolderName(char A, char B)もしくはFolderName(char A[], char B[])
と定義してFolderName(szFile, szFileName)と使用しても
「関数に2個の引数を指定できません」と言われるし…
2個引数入ってるのに何でこんなエラーが返ってくるのやら。
ちなみに
char szFileName[64];//オープンするファイル名(パス付き)
char szFile[MAX_PATH];//ファイル名
です。
0495デフォルトの名無しさん
2005/09/25(日) 17:36:34>>494はヘッダを直してませんでした。
0496デフォルトの名無しさん
2005/09/25(日) 17:45:55申し訳ありません。
ヘッダにあった関数宣言を直したらいけました。
C言語のつもりでやっててこんな大ポカするとは情けない…
0497デフォルトの名無しさん
2005/09/25(日) 21:25:34条件はもっと厳しくて、PODにしか使えないよ。
0498デフォルトの名無しさん
2005/09/26(月) 01:15:19のときの
if(a==0){}
のようなことを
char a;
の時にするにはどうしたら良いのでしょうか
if(a==OK){}
if(a=="OK"){}
などとやってもだめみたいで
0499デフォルトの名無しさん
2005/09/26(月) 01:18:080500デフォルトの名無しさん
2005/09/26(月) 01:24:110501498
2005/09/26(月) 02:00:13ファイルの中から特定の単語の数えるような事がしたくて
0502デフォルトの名無しさん
2005/09/26(月) 02:01:230503デフォルトの名無しさん
2005/09/26(月) 02:02:56こういう事か?
if(isdigit(a)){}
ctype.hをインクルードしとけよ
0504デフォルトの名無しさん
2005/09/26(月) 02:09:24こういうことか?
0505デフォルトの名無しさん
2005/09/26(月) 02:14:550506デフォルトの名無しさん
2005/09/26(月) 02:16:230507デフォルトの名無しさん
2005/09/26(月) 02:17:380508デフォルトの名無しさん
2005/09/26(月) 02:26:59文字列というな。std::stringクラスと言え。
0509デフォルトの名無しさん
2005/09/26(月) 02:29:32std::stringクラスというな。クラステンプレート std::basic_string と言え。
0510デフォルトの名無しさん
2005/09/26(月) 02:35:36それはクラスであって、
生成したオブジェクトじゃねーんじゃねの?
0511510
2005/09/26(月) 02:36:370512デフォルトの名無しさん
2005/09/26(月) 02:42:360513デフォルトの名無しさん
2005/09/26(月) 03:01:20std::basic_string<char>と(ry
0514498
2005/09/26(月) 03:02:21たとえば、0と1が百個並んでるファイルF.datがあったとして
その中に0が何個あるか数えたいときは
int a,n=0;
ifstream inf("F,dat");
for(int i=0; i<100; i++){
inf >> a;
if(a==0){n++;}
}
とすれば0の数が変数nに出てきますよね
では、ONとOFFの羅列だったら
ON OFF OFF ON ON ON OFF OFF ON ……
ONの数を数えるにはどうしたらいいのでしょう
int n=0;
char a[3];
ifstream inf("F,dat");
for(int i=0; i<100; i++){
inf >> a;
if(a==ON){n++;}
}
とすると
ONは定義されていない、初めて使われる関数です
とていわれてしまうわけです
0515デフォルトの名無しさん
2005/09/26(月) 03:04:270516デフォルトの名無しさん
2005/09/26(月) 03:42:03そりゃ文字列リテラルになってないんだから当然だな、クオートしろ
ってかそれでちゃんと読み込めてるのか?
C++流のやり方分からんのならCのやり方でやりゃいいじゃん
0517デフォルトの名無しさん
2005/09/26(月) 04:27:33cやc++は文字列同士の比較はサポートされていないので関数を使う必要がある
if( 0 == strcmp( a, "ON" ) )
とかね
あと配列について0から勉強し直した方がいいと思う。
0518デフォルトの名無しさん
2005/09/26(月) 06:48:440519デフォルトの名無しさん
2005/09/26(月) 06:56:33/ヽ /ヽ
/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | // ___ \ ::::::::::::::|
| | | | | U :::::::::::::|
| | .|U | | ::::::U::::|
| | | ├―-┤ U.....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::
0520デフォルトの名無しさん
2005/09/26(月) 06:58:46筆舌には尽くし難いぐらいいいことがあるよ
0521デフォルトの名無しさん
2005/09/26(月) 06:59:32> char a[3];
ダウト
0522デフォルトの名無しさん
2005/09/26(月) 07:23:230523498
2005/09/26(月) 08:39:13ありがとうございます
大変たすかりました
0524デフォルトの名無しさん
2005/09/26(月) 09:21:470525デフォルトの名無しさん
2005/09/26(月) 09:37:29std::string buf;
std::ifstream inf("f.dat");
while(inf) {
inf >> buf;
if (buf == "ON") cnt++;
}
std::cout << cnt;
…ので作ってみた。
ifstreamの動作よく知らないので手間取ってしまった。
0526デフォルトの名無しさん
2005/09/26(月) 17:21:11基本的動作を理解してない奴がいるのか。
やはりC++は初心者にとっては鬼門なのかねえ。
0527デフォルトの名無しさん
2005/09/26(月) 17:37:33ソースコードを打ち込んでると、その内シナプスが効率よく働くようになるさ
0528デフォルトの名無しさん
2005/09/26(月) 19:06:00みたいな
0529デフォルトの名無しさん
2005/09/26(月) 19:15:31標準侑出力標準侑出力標準侑出力標準侑出力標準侑出力
標準侑出力標準侑出力標準侑出力標準侑出力標準侑出力
m9(^д^)
0530デフォルトの名無しさん
2005/09/26(月) 20:14:27>>525のプログラムには幾つか欠陥があります。
それを指摘してください。
0531デフォルトの名無しさん
2005/09/27(火) 00:03:340532デフォルトの名無しさん
2005/09/27(火) 00:05:24俺はマスターではないが、一つだけ。
while (inf) がまずい。
やるんだったら、inf >> buf; の後に if (!inf) break; だな。
0533デフォルトの名無しさん
2005/09/27(火) 02:24:420534デフォルトの名無しさん
2005/09/27(火) 10:00:02社名?
0535デフォルトの名無しさん
2005/09/27(火) 13:09:500536デフォルトの名無しさん
2005/09/27(火) 13:17:120537デフォルトの名無しさん
2005/09/27(火) 14:10:47char *pBuffer;
pBuffer = new char[SIZE];
とSIZE分メモリを確保したとして、
あとでこのサイズがいくつだったか
pBufferから調べることってできますか?
sizeof(pBuffer);
みたいな感じで・・
どなたかよろ m(__)m
0538デフォルトの名無しさん
2005/09/27(火) 14:12:13その手の質問は散々既出だけど、無理。
どこかにサイズを退避させておきませう。
0539デフォルトの名無しさん
2005/09/27(火) 14:15:29ご親切にありがとうございます。
退避させちゃいまっす
ども m(__)m
0540デフォルトの名無しさん
2005/09/27(火) 15:34:38ListViewで
マウスポインタのある部分の
SubItemsのテキストを取得したいのですが
どんなコーディングになるのでしょうか??
0541デフォルトの名無しさん
2005/09/27(火) 15:37:500542540
2005/09/27(火) 15:48:06http://dobon.net/vb/dotnet/control/lvitemtooltip.html
ここを見て、 改造してるんですが
うまくいきません。
0543デフォルトの名無しさん
2005/09/27(火) 15:52:510544デフォルトの名無しさん
2005/09/27(火) 15:54:010545540
2005/09/27(火) 15:55:03他の板に投げます
0546デフォルトの名無しさん
2005/09/27(火) 15:57:42どのみつスレ違いだが
0547デフォルトの名無しさん
2005/09/27(火) 15:58:11言語が何だかわからんが、このスレということはC/C++なのか。
マウスの座標が分かっているのなら、SubItemHistTest()を使う。
0548デフォルトの名無しさん
2005/09/28(水) 00:18:20つまりはリストボックスの項目をクリックすると、ダイアログプロシージャにメッセージを送れるか
どうかを知りたいのです。
select(msg){
case: ID ←このIDに相当するIDをリストボックスの項目をクリックするだけで得られるかどうか
…(中略)…
}
まぁダメならダイアログにボタンを余分に一個作ってやればいい話なんですけどね…。
0549デフォルトの名無しさん
2005/09/28(水) 00:34:18spy++
0550デフォルトの名無しさん
2005/09/28(水) 00:46:33とりあえずWin32APIと仮定して釣られておく
メッセージIDがWM_NOTIFYでコマンドIDはNM_CLICK
http://yokohama.cool.ne.jp/chokuto/urawaza/notify/NM_CLICK.html
0551デフォルトの名無しさん
2005/09/28(水) 17:37:48#include "stdio.h"
class CHoge {
int HOGEHOGE() { a=4; return 0; }
int a;
};
struct SHoge {
int a;
};
int main(void){
CHoge c1;
SHoge s1;
printf("%d,%d,%d", sizeof(c1), sizeof(s1));
return 0;
}
(メンバは全て public 指定をしています。)
構造体とクラスの違いを調べるため、上記のようなコードを書いてテストした結果、"4,4" と出力されました。
クラス CHoge はメンバ関数を持つため、関数実態へのアドレスを格納する必要があるので、
sizeof(CHoge) > sizeof(SHoge) となると思ったのですが、これはどういうカラクリなのでしょうか。
よろしくお願いします。
0552デフォルトの名無しさん
2005/09/28(水) 17:45:20CHoge::HOGEHOGE()
は、
int CHoge__HOGEHOGE( CHoge* this )
としてコンパイルされる、と考えればわかるかな?
ちなみに virtual な関数を作ると、vtbl の分だけ大きくなるけど、
構造体にもメンバ関数はつけれるし、派生もできる。
結論としては、struct と class の違いはない。
0554デフォルトの名無しさん
2005/09/28(水) 18:04:120555デフォルトの名無しさん
2005/09/28(水) 18:20:47にはつっこまんのか
0556551
2005/09/28(水) 18:46:400557デフォルトの名無しさん
2005/09/28(水) 19:16:220558デフォルトの名無しさん
2005/09/28(水) 19:17:59それはOKだと思ったが
0559デフォルトの名無しさん
2005/09/28(水) 19:19:44virtualじゃないしね
0560デフォルトの名無しさん
2005/09/28(水) 19:25:20iostreamでもなくcstdioでもなくstdio.hダッサー
というのなら、main()でなくわざわざmain(void)ダッサー(C++なのに)
と言っても同じことではあるまいか
0561デフォルトの名無しさん
2005/09/28(水) 19:29:01そこじゃないような・・・
0562デフォルトの名無しさん
2005/09/28(水) 19:49:06ダイアログ内のピクチャコントロールにファイルから読み込んだBMPやJPGを表示させたいのですが、
様々なサイトを回ってみて6時間以上試行錯誤を繰り返しても上手く表示されなくて困っています。
case ID_IMAGE: //画像を表示させるボタンのID
hImg = (HBITMAP)LoadImage(hInst1, (LPCTSTR)buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
//注;bufはファイル名がフルパスで示された文字列
でBMPのハンドルを取得して
SendMessage(GetDlgItem(hDlgWnd, ID_IMG), STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hImg);
//※ID_IMGはピクチャコントロールのID hDlgWndはダイアログのハンドル
でピクチャコントロールにメッセージを送れば表示されるはずなのですが…
ビューワのような動作をさせるため画像はリソースとして取り込んではおりません。
ボタンを押した一回目はhImgはNULLでは無かったのが2回目押すとNULLになっていた点から
ハンドルがうまく取得できていないのだと考えてます。
ディレクトリ内の画像ファイルをピクチャコントロールに表示させるにはどのように記述したら良いのか
0563デフォルトの名無しさん
2005/09/28(水) 20:19:24細かい事忘れたが、LoadImageして出来たDDBをDIBに変換してオフラインイメージ作っとかないとダメなんじゃないか?
0564デフォルトの名無しさん
2005/09/28(水) 20:31:27オフラインですか?
確かにDDBやDIBやデバイスコンテキストといったキーワードありましたね。
ちなみにLoadImage→SendMessageは猫プロ349章で見たものです。
0565デフォルトの名無しさん
2005/09/28(水) 20:34:22たぶん>563の言い方だと難しいと思うから、通訳させてもらうと、
ビットマップ>メモリデバイスコンテキスト>デバイスコンテキスト(描画)
じゃないとダメだと思う。理由は知らない。
0566デフォルトの名無しさん
2005/09/28(水) 20:39:42ここ3日ぐらい調べているのですが、わからないのです。
0567デフォルトの名無しさん
2005/09/28(水) 20:57:26猫なら26章。
ただし、ID〜とリソースID割り付けると(IDはint型)、LoadBitmapの第2引数はLPCTSTR型、はっちゃき言うとchar*型だから、
""でくくられてないとダメ。(表示されない)
だから、そちらがやってるように、26章のLoadBitmapをLoadImageでやってやると、ディレクトリ直接指定できるし、便利。
どうしてもLoadBitmapを使うなら、リソースファイルを用途:テキストで開いてやって、リソースIDを"BITMAPの名前"にしてやる必要がある。
なんか、猫にいちゃもんつけてしまったみたいだけど、猫は百貨店の様にバリエーション豊富で非常に助かるサイト。
0568デフォルトの名無しさん
2005/09/28(水) 20:59:10そうですか…
流れとしてはttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/load_ddb.html
のような感じになるのですね。ありがとうございました。
0569デフォルトの名無しさん
2005/09/28(水) 21:01:290570デフォルトの名無しさん
2005/09/28(水) 21:19:00DIBにするなら、LoadImageで直接CREATEDIBSECTIONすれば
0571デフォルトの名無しさん
2005/09/28(水) 21:19:47はっちゃけて言っても違います
0572デフォルトの名無しさん
2005/09/29(木) 01:20:24↓
いまさっき、色々サイト見回してきて、ボーランドってサイトのDLして
set path=%path%;c:\borland\bcc55\bin
これしたらコンパイルできました。
でも なんかエラーとか警告とかヒドイ・・・これって単にプログラムが間違ってるってことでしょうか?
↓
read me嫁といわれて読んだのですが、意味がわからなくて・・・orz
どうすればいいでしょうか?
0573デフォルトの名無しさん
2005/09/29(木) 01:35:04VisualStudio買って来い。
0574デフォルトの名無しさん
2005/09/29(木) 01:53:58エラーメッセージが出てるなら、コンパイルができたとは言わない。
「なんかエラーとか警告とかヒドイ」言われても、こちらは
どんなエラーが出てるのかわからないので何とも言えない。
どんなソースをコンパイルしたのかもわからないし。
0575572
2005/09/29(木) 02:05:32でもプログラムが間違えてる。
100までは\120で
200までは\250で
300以上は\400。
例えば410だったら 100*120*100*250+110*400=
っていうの作りたいんだけど、
なんか自分の作ったやつ
410だったら 410*400= になっちゃっうんだ・・・どうしたものか・・・
0576デフォルトの名無しさん
2005/09/29(木) 02:06:34>>例えば410だったら 100*120*100*250+210*400=
0577デフォルトの名無しさん
2005/09/29(木) 02:22:28なにがいいたいのかさっぱりわからない。
0578デフォルトの名無しさん
2005/09/29(木) 02:24:06???
すまん、言ってる事の意味がわからない。
1)何をするためのプログラムで、
2)中でどういう処理をして、
3)結果として何を表示するのか、
もう少しわかりやすく説明してくれ。
0580デフォルトの名無しさん
2005/09/29(木) 02:33:38迷惑だからもう来ないでくれ
0581デフォルトの名無しさん
2005/09/29(木) 02:43:48昨日の面接の時の俺のようだ・・
ちくしょー俺は足りない人じゃねー
ちょとあがり症なだけなんだー
0582デフォルトの名無しさん
2005/09/29(木) 02:52:58悪いが明らかに足りない人だ
0583デフォルトの名無しさん
2005/09/29(木) 02:58:03その計算の中身がわからないのだが・・・
計算式をもっと詳しく、他人が見てわかるように書いてくれ。
入力された数値の範囲によって計算式が変わるなら
そのパターンも全部書いてくれ。
>>581
プログラマには(他人との)コミュニケーション能力も必要だぞ
自分が作ったプログラムの仕様を説明できないと複数人での作業なんてできないしな。
0584デフォルトの名無しさん
2005/09/29(木) 03:21:28俺等が何がわからないのか、俺が君から引き出してあげよう。
>100までは\120で 200までは\250で 300以上は\400。
>例えば410だったら 100*120*100*250+110*400=
>っていうの作りたいんだけど
ってあるけど、「100までは〜、200までは〜、300以上は〜、」って文章と
その後の、「例えば〜」って文章が、俺等の方では全く繋がらない。
正直、前半の説明の時点で
int kansu(int atai)
{
if(atai <= 100)return 120;
if(atai <= 200)return 250;
if(atai < 300)return はぁ?;
if(atai >= 300)return 400;
return ウンコ!;
}
で、いいじゃんとか思ったけど、
後半で「例えば410だったら 100*120*100*250+110*400=」なんて言ってるから、
俺等からしてみれば「はぁ?お前300以上は400だって言ってただろ!殺すぞ!しかもなんでそんな複雑なことになっちゃってんだよ!」
って感じ。
0585デフォルトの名無しさん
2005/09/29(木) 03:50:310586デフォルトの名無しさん
2005/09/29(木) 04:35:42>>200までは\250で
>>300以上は\400。
>>例えば410だったら 100*120*100*250+110*400=
この式から解析するに300以上じゃなくて200より上ってことだろ?
x<=100 120
x<=200 250
x>200 400
0587デフォルトの名無しさん
2005/09/29(木) 04:42:39いや、そういう微妙な問題じゃねーんじゃねーかな。
とか思ってる。
つか、この状況であんまり考えても時間の無駄だから、本人さっさとでてきて説明しろ。
0588デフォルトの名無しさん
2005/09/29(木) 04:46:41しかも、
>100*120*100*250+110*400
この↑式も本当にこうなのか?って疑問もある。
100*120*100*250じゃなくて100*120+100*250じゃね?とか、
よしんば、そこがプラスだったにせよ。やっぱり、式を組み立てても、俺にはようわからん。
0589デフォルトの名無しさん
2005/09/29(木) 04:51:11> 100までは\120で
> 200までは\250で
> 300以上は\400。
なのに、
> 例えば410だったら 100*120*100*250+210*400=
210はどこから出てきたのかと。
いや、他の部分の計算も意味不明なのだが。
0590デフォルトの名無しさん
2005/09/29(木) 04:53:160591デフォルトの名無しさん
2005/09/29(木) 05:04:49101個目から200個目までは1個250円
201個目からは1個400円
ってことだろ?
0592デフォルトの名無しさん
2005/09/29(木) 05:06:52あー、そんな訂正レスがあったのか・・・よくみなかったぜw
やっぱそれって
100と100と210で410になるからそれっぽくね?
すると、
100*120 + 100*250 + 210*400
とかしたいんじゃね?
でも、\=円(?)とかあるからなぁ・・・
問題読み間違えてんじゃねーの?こいつ。
てか、色々考えられちまうから、まず、どんな問題を渡されてるのかはっきりしてほしいよね。
0593デフォルトの名無しさん
2005/09/29(木) 05:07:23フォルダにあるファイル一覧を取得するにはどうすればよいでしょうか?
windowsです
0594デフォルトの名無しさん
2005/09/29(木) 05:09:58だからぁ・・・
普通、たくさん買うほど1個当たりの値段安くすんだろ?
それだと、こいつ問題読み間違えてるか、問題出した奴がガチで馬鹿かどっちかだろ?
それともビックリマンチョコ大人買い防止措置でも働いてんのか?
0595デフォルトの名無しさん
2005/09/29(木) 05:20:25ttp://www14.big.or.jp/~ken1/tech/tech5.html
このあたり参照
0596デフォルトの名無しさん
2005/09/29(木) 05:20:50自分で調べることができない人間は買った方が早い
http://www.amazon.co.jp/exec/obidos/ASIN/4798003107/
ちなみに俺も買った。WIN32APIでできること調べるだけでも面倒臭い。時間の無駄と判断。
今回の問題についていうと
Win32APIにFindFirstFile関数ってのがあるからそれを調べてやってくれい。
C言語でそれができるかどうかは知らない。
俺はやってるサンプルみたことないけど。
0597デフォルトの名無しさん
2005/09/29(木) 05:24:48>>596
ありがとうございました
0598デフォルトの名無しさん
2005/09/29(木) 05:26:15おお、被ったw
でも、多分>>593はそれはわかってるのかもわからん。
ただ、C・C++でできるかどうかが聞きたいのかもしれん。
0599デフォルトの名無しさん
2005/09/29(木) 05:28:080600デフォルトの名無しさん
2005/09/29(木) 05:29:28いや、もしかしたら、100個までは1個に付き120円引きなのかもしれんw
200個までは1個に付き250円引きになるとかw
0601デフォルトの名無しさん
2005/09/29(木) 05:29:530602デフォルトの名無しさん
2005/09/29(木) 05:33:010603デフォルトの名無しさん
2005/09/29(木) 05:51:39Windows然り、MacOS然り、Linux/Unix然り
0604デフォルトの名無しさん
2005/09/29(木) 06:36:490605デフォルトの名無しさん
2005/09/29(木) 06:52:14ワラタw
初めてのお使いで、違う物買ってきちゃった餓鬼に向かって
>>602のセリフを逝ってる図を想像したw
0606デフォルトの名無しさん
2005/09/29(木) 07:12:36いや、個とか円とかは勝手に>>591が書いただけだから
出題者は値段とか言ってないだろw
0607デフォルトの名無しさん
2005/09/29(木) 07:18:32>>575
0608デフォルトの名無しさん
2005/09/29(木) 10:38:16×一般的な
○現在のパソコンで一般的な
>>594
販売ではなく、モノを預かり(or受け取り)処理する類のサービスでは
一回あたりの量(orサイズ)が増えるほど高くなることがあるからそれジャマイカ。
#廃棄物処理とか
0609デフォルトの名無しさん
2005/09/29(木) 11:41:52一通り網羅してるようなサイトありますか?
あと.net 2003でforkを試してみたいのですが、何をインクルードすればいいでしょうか?
0610デフォルトの名無しさん
2005/09/29(木) 12:13:09???
> fork
マルチスレッドなら専用スレがあったはずだお
0611デフォルトの名無しさん
2005/09/29(木) 12:25:46すいません。
PerlのCPANみたいに、C,C++用のインクルードファイルを一通り網羅してるサイトはありませんか?
0612デフォルトの名無しさん
2005/09/29(木) 12:35:22STLがまだ欠けてるが、本家にあがってるぞ。
http://www.cplusplus.com/ref/indexr.html
英語だけどさほど難解でもないので結構使えるぜよ。
0613デフォルトの名無しさん
2005/09/29(木) 13:00:21大ループはじめ
if(条件)(変数名=001;チェック1;)else 変数名=111;チェック2;
switch(変数名) case 001:チェック3;
case 111:チェック4;
defoult:チェック5;
大ループ閉じ
fprintf
というように分岐させてるんですが、変数に111が入ってもcase111の処理に行きません。
チェック3の場所のループ回数をfprintfで数えましたところ0ではなかったので変数はちゃんと111の値をとっています。
変数が111なのにcase111に行かないなんてあるのでしょうか?
0614デフォルトの名無しさん
2005/09/29(木) 13:04:38デバッガで追え。
0615デフォルトの名無しさん
2005/09/29(木) 13:29:31CのインクルードファイルはPerlのCPANモジュールなんかとは違う
ファイルその物は網羅して意味があるような物じゃない
というか、インクルードファイルだけ持ってきても仕方ない
0616デフォルトの名無しさん
2005/09/29(木) 13:38:27もっとちゃんとソースを書け
0617デフォルトの名無しさん
2005/09/29(木) 14:40:12全然何言ってるか何書いてるか分からんけど
>チェック3の場所のループ回数をfprintfで数えましたところ0ではなかったので変数はちゃんと111の値をとっています。
チェック 3 を通ってるということは変数が 001 なんだから、case 111 を通らないのは当たり前じゃないのか?
各 case 内で break してるかどうか知らんが
0618デフォルトの名無しさん
2005/09/29(木) 14:42:03を設けたくないのですがよい方法はないでしょうか?
良い方法が思いつかなかったので、
-----------------------------------------------
char *buff;
char tmp[256]; <- ここを制限したくない
scanf("%s", tmp);
buff = (char *)malloc(strlen(tmp)+1);
strcpy(buff, tmp);
-----------------------------------------------
としたのですが、
char *buff = "Manday";
のようにポインタを上限を考えずに使える配列のように使い、
キーボードからの入力を受け付ける方法はないでしょうか?
0619デフォルトの名無しさん
2005/09/29(木) 14:51:09まあ逆にいうと現実的には無理よと言う話だが。
どうでもいいツッコミをさせてもらうと月曜日はMondayだしscanfを使うのはともかく戻り値チェックくらいはしなさい。
0620デフォルトの名無しさん
2005/09/29(木) 14:56:34制限をしたくないのであれば、fgetc()を使って改行文字が来るまで待つか、
fgets()を使って末尾が改行文字になるまで待つか、どちらかの対策が必要。
制限していいが安全に入力させたいなら、fgets()を使うか、scanf()で文字数制限をすればいい。
0621デフォルトの名無しさん
2005/09/29(木) 15:11:26>>620
返答ありがとうございました。
やはり、scanfを使って入力を受け付けるためには文字数の制限が必要なんですね^^;
0622デフォルトの名無しさん
2005/09/29(木) 15:30:53つーか、scanf()で制限しないと黙ってメモリを壊すから。
その場合はgets()と同罪になってしまう。
そもそも目的が分からないから最適解を提示できない。
0623デフォルトの名無しさん
2005/09/29(木) 15:31:17とゆうかscanfは危ないからやめれ
0624デフォルトの名無しさん
2005/09/29(木) 16:16:23Bから見て、Aを宣言してるヘッダファイルはどこでインクルードするのが普通?
Bのヘッダファイル内なのか、Bのコード本体のファイルなのか・・・
0625デフォルトの名無しさん
2005/09/29(木) 16:24:05Bを宣言しているヘッダ。
ただしAへのポインタや参照だけならヘッダでは前方参照だけを書けば済むので、その場合はcppファイルでインクルードする
0626デフォルトの名無しさん
2005/09/29(木) 16:43:54#include <stdio.h>
#include <stdlib.h>
#define MAX 128;
int main(void);
int main(void)
{
char buf[MAX]; ←ここで
int n;
error C2143: 構文エラー : ']' が ';' の前に必要です。
error C2143: 構文エラー : ';' が ']' の前に必要です。
とかでるんだけどなんでですかねー?
0627デフォルトの名無しさん
2005/09/29(木) 16:45:45マクロ展開されると
char buf[128;];
どこがおかしいか分かるよな?
0629デフォルトの名無しさん
2005/09/29(木) 16:50:39>>628
おはずかしいかぎりです
0630デフォルトの名無しさん
2005/09/29(木) 16:50:400631デフォルトの名無しさん
2005/09/29(木) 17:30:140632デフォルトの名無しさん
2005/09/29(木) 17:35:01初心者には無理です。そうでないなら自分で探してください。
#つーか、説明すんの面倒なんだよ。
0633デフォルトの名無しさん
2005/09/29(木) 17:35:10http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%82%A8%E3%83%87%E3%82%A3%E3%83%83%E3%83%88+%E8%83%8C%E6%99%AF%E8%89%B2&num=50
0634デフォルトの名無しさん
2005/09/29(木) 18:18:13この文字列から'が'の文字を削除し
'ん'と'こ'の間に'ぽ'を加えたいのですが、文字列の書き加えと削除の方法が分かりません。
教えてください。おながいします。
0635デフォルトの名無しさん
2005/09/29(木) 18:27:27char buf[10];
sprintf(buf, "%.4s%s%s", str + 2, "ぽ", str + 6);
sprintf()の応用はこの辺も参考に。
http://pc8.2ch.net/test/read.cgi/tech/1126357741/458
もっと単純にやりたければC++でstd::stringでも使うしか。
0636デフォルトの名無しさん
2005/09/29(木) 18:28:55リテラルは書き換え不能
0637デフォルトの名無しさん
2005/09/29(木) 18:34:570638デフォルトの名無しさん
2005/09/29(木) 18:37:530639デフォルトの名無しさん
2005/09/29(木) 18:41:460640634
2005/09/29(木) 19:01:35THX!
0641デフォルトの名無しさん
2005/09/29(木) 21:02:54できるできないの問題じゃない
やってはいけない
0642デフォルトの名無しさん
2005/09/29(木) 21:06:58それはこのスレの範囲から外れているからそうとは言い切れない。
0643デフォルトの名無しさん
2005/09/29(木) 21:09:29このスレの範囲ってなんだ?
0644デフォルトの名無しさん
2005/09/29(木) 21:17:24少なくともアセンブラはこのスレの範囲外だと俺は思う。
0645デフォルトの名無しさん
2005/09/29(木) 21:23:00馬鹿?
0646デフォルトの名無しさん
2005/09/29(木) 22:08:51俺は名前すらうろ覚えだけど。
0647デフォルトの名無しさん
2005/09/29(木) 22:57:430648デフォルトの名無しさん
2005/09/29(木) 23:00:560649デフォルトの名無しさん
2005/09/30(金) 00:19:46出来る出来ないは環境依存だが、
文字列リテラルの書き換えを行うべきではない、
と言うのはC/C++として正しいだろ。
0650デフォルトの名無しさん
2005/09/30(金) 06:15:18a=10;
b=34;
if (a=b){
printf("a==b \n");
}
と言うプログラムでifが実行されるのは分かるのですが、
a=bの結果がbが34により34になるというのが分かりません。
なぜaが10により10にはならないのですか?
代入演算子が右結合だから、aに10が代入されてbに34が代入されて
a=bを評価するときaも34になってしまうからですか?
0651デフォルトの名無しさん
2005/09/30(金) 06:27:140652デフォルトの名無しさん
2005/09/30(金) 07:33:18strはリテラルをポイントしている。
>>650
藻前は頓珍漢を山盛りしている。
0653デフォルトの名無しさん
2005/09/30(金) 07:37:03だから、人に聞く前に本を一冊くらい読めと・・・
こんなの初心者以前の問題。
0654デフォルトの名無しさん
2005/09/30(金) 08:37:04勉強になるな
0655デフォルトの名無しさん
2005/09/30(金) 09:06:51aにbを代入すればaがbと同じ値になるのは当然
代入演算子の評価値は代入された値が返ってくる
aとbが等しいか確認したいならa==bとする事
0656デフォルトの名無しさん
2005/09/30(金) 10:22:06str の型と文字列リテラルの定義に相関関係自体ないが?
# str の指している先がたまたま文字列リテラルであって、
# 文字列リテラル自体の型は、指される元とは関係ないよ。
0657デフォルトの名無しさん
2005/09/30(金) 10:33:21(前略)
一方、文字列定数すなわち文字列リテラルは
"I am a string"
あるいは
"" /* 空の文字列 */
のように、2重引用符で囲まれた0個以上の文字の列である。
(後略)
0658デフォルトの名無しさん
2005/09/30(金) 11:59:44if (a = b) {ってのんはこう書くのと同じ。
a = b;
if (a) {
で、if (a)はif (a != 0)と同じ。
0659デフォルトの名無しさん
2005/09/30(金) 13:56:53リテラルを書き換えるのがまずいのは、
1) 規格上は「未定義」。つまり文字列リテラルの中身を書き換えることにより
HDDがISO委員会からのラブレターで埋め尽くされても文句は言えない。
上記で終わりにしてもいいんだが、実装依存の話をすると、
2) 文字列リテラルはメモリ上の書き込み不可能な領域に配置されることがある。
当然その場合は書き込もうとすると、メモリ保護のあるシステムでは
セグメント違反のようなエラーが発生する。
この辺は完全に処理系やコンパイラのオプション設定による。
例えばgccはデフォルトで文字列リテラルをTEXTに配置し
msvcではDATAに配置する。両者とも、オプションでその挙動を変更できる。
# つまり、msvcではデフォルトでは文字列リテラルを書き換えられる。
# が、良い子はやってはいけない。
3) K&R時代の古いCプログラムでは、確信犯的にリテラルの中身をいじっている
プログラムがたまにあった。そういうプログラムを扱えるようにするために、
実際には文字列リテラルを書き込み可能にするようなオプションを提供している
Cコンパイラが多い、と思われる。
0660デフォルトの名無しさん
2005/09/30(金) 18:11:53しかしplatformSDKのDLサイトに飛んでも「coreSDK」をDLする所が見つかりません・・・
検索等してみましたがどこのHPにも同じ事しか書いてありません。
一体どこにcoreSDKはあるのでしょうか・・・?
0661デフォルトの名無しさん
2005/09/30(金) 18:15:550662デフォルトの名無しさん
2005/09/30(金) 18:40:12>C++を始めるのにVisualc++ toolkitとcoreSDKが必要と書いてあります。
C++のプログラムを作りたいなら、コンパイラだけあれば十分です。
Windowsアプリを作るなら、SDKが必要です。
>一体どこにcoreSDKはあるのでしょうか・・・?
Platform SDKの中に入ってます。
0663デフォルトの名無しさん
2005/09/30(金) 18:59:20ありがとうございました、早速DLしてみます。
0664デフォルトの名無しさん
2005/09/30(金) 19:08:03class Object
{
public:
Object(int i=0):val(i){}// コンストラクタ
operator int() { return val;}// int型へのキャスト
private:
int val;
};
void func1(int a);
void func2(Object &o);
int i;
Object obj;
まずこんなクラス、関数、変数があるとします。
それで関数を呼ぶとき、
func1( static_cast<int>(obj) );
こちらは問題無くキャストされfunc1を呼ぶ事が出来るので、func2も
func2( static_cast<Object>(i) );
このように呼びたいと思っているのですが、このままではコンパイルエラーになってしまいます。
operator Object(int i){Object o(i); return o;}
こんな感じにObject型への型変換演算子をオーバーロード出来たらいいのかなと思ったんですが、
やり方がわからないです。何かいい方法はありますでしょうか?
0665デフォルトの名無しさん
2005/09/30(金) 20:06:51とりあえずbcc5.5.1とVC++.NET2003では下のコードがコンパイル通るし動作するようだけど
そちらの環境を晒してくれんか
#include <cstdio>
using namespace std;
class Object
{
public:
Object(int i=0):val(i){}
operator int() { return val;}
private:
int val;
};
void func1(int a){
printf("func1 : %d\n", a);
}
void func2(Object& o){
printf("func2 : %d\n", static_cast<int>(o));
}
int main(){
Object obj(100);
int i=200;
func1( static_cast<int>(obj) );
func2( static_cast<Object>(i) );
return 0;
}
0666デフォルトの名無しさん
2005/09/30(金) 20:08:070667666
2005/09/30(金) 20:09:450668デフォルトの名無しさん
2005/09/30(金) 20:21:49- void func2(Object &o);
+ void func2(const Object &o);
「一時オブジェクトは非const参照型に束縛できない」だっけ?
0669デフォルトの名無しさん
2005/09/30(金) 21:30:152次元配列には、x[i, j]とx[i][j]のタイプがありますが、後者の宣言の方法が分かりません。
前者は
double x __gc[,];
でうまくいくのですが、後者を
double x __gc[] __gc[];
としてもコンパイルエラーになってしまいます。
文法が誤っていますか?それともmanage C++では後者の配列は定義できませんか?
0670664
2005/09/30(金) 22:13:00今試してみたらこちらでも無事動いてしましました(汗
さっきまでのは何だったのか…、なにか勘違いしていたようです、本当にすいませんorz
環境は、VisualC++ 6.0
Win32 Console Application です。
わざわざ試して下さって有難う御座いました。
static_cast<Object>(i)でエラーにならないのは
一時オブジェクトのコンストラクタにiの値が渡されるんですかね、
この辺理解が足りませんでした。申し訳ないです。
>>668
それは知りませんでした、レスどうもです。
0671デフォルトの名無しさん
2005/10/01(土) 14:40:17違います。後者のは配列の配列です。
つまり x[i]を X とかに置き換えて X[j] と考えればよろしいかと。
0672デフォルトの名無しさん
2005/10/01(土) 14:44:490673デフォルトの名無しさん
2005/10/01(土) 14:50:470674デフォルトの名無しさん
2005/10/01(土) 15:37:050675デフォルトの名無しさん
2005/10/01(土) 15:45:48float cellValue(int row, int col) { }
public:
__property float Cells[int row][int col] = { read=cellValue };
0676デフォルトの名無しさん
2005/10/01(土) 16:17:020677デフォルトの名無しさん
2005/10/01(土) 16:41:06そりゃC++Builderだ
0678デフォルトの名無しさん
2005/10/01(土) 17:01:58それなんてVB?
0679デフォルトの名無しさん
2005/10/01(土) 17:28:190680デフォルトの名無しさん
2005/10/01(土) 18:18:08できないという仕様だ。
http://support.microsoft.com/?scid=kb;ja;814058
0681デフォルトの名無しさん
2005/10/01(土) 19:27:09managed C++ の文字が目に入らんのか
それから、標準でも x[i, j] は宣言以外のコンテキストでは有効だから、文法がないというのは言いすぎ。
0682デフォルトの名無しさん
2005/10/01(土) 19:50:15横からすまんが、
何?そのmanaged C++って環境依存ならスレチガイじゃね?
0683デフォルトの名無しさん
2005/10/01(土) 19:51:52スレタイを100回暗唱しておいでなさい
0684デフォルトの名無しさん
2005/10/01(土) 19:59:09じゃあ、visual C++=MFCもOKなのかと・・・
暗黙的には駄目だろう。
俺はmanaged C++がその仲間だと思ったんだけど。
そもそもどういうもんか知らんのよ。
0685デフォルトの名無しさん
2005/10/01(土) 20:00:39それから100回書けw
0686デフォルトの名無しさん
2005/10/01(土) 20:04:19MFCはC++と言うより、Win32APIに近いんじゃね?
テンプレ見た限りOKな気がするけど。
0687デフォルトの名無しさん
2005/10/01(土) 20:07:56勝手にVC++=MFCにすんなよw
0688デフォルトの名無しさん
2005/10/01(土) 20:29:47その辺はっきりさせないと初心者も混乱しそうだし。
0689デフォルトの名無しさん
2005/10/01(土) 20:32:21managed C++ やろうぜ!!
http://pc8.2ch.net/test/read.cgi/tech/1014486422/
0690デフォルトの名無しさん
2005/10/01(土) 21:03:490691デフォルトの名無しさん
2005/10/01(土) 23:35:45おいおい、さすがにどんな馬鹿でもまmanagedC++==C#なんて考える奴はいないだろ
JavaとC+が同じだと言ってるに等しいぞ
0692デフォルトの名無しさん
2005/10/01(土) 23:50:020693デフォルトの名無しさん
2005/10/01(土) 23:54:490694デフォルトの名無しさん
2005/10/02(日) 00:00:270695デフォルトの名無しさん
2005/10/02(日) 00:18:220696デフォルトの名無しさん
2005/10/02(日) 00:22:000697デフォルトの名無しさん
2005/10/02(日) 10:14:49以下のように役の名前を宣言するとクラスメンバーが初期化できないといわれます。
どういうことなんですか?
Win+BCC32です。
class Poker{
private:const char *pairName[] = {
"No Pairs",
"One Pair",
"Two Pairs",
"Three of a Kind",
"Straight",
"Flush",
"Full House",
"Four of a Kind",
"Straight Flush",
"Royal Flush",
};
:
:
0698デフォルトの名無しさん
2005/10/02(日) 10:26:10そういうことはコンストラクタ初期化子でやらないといけない。
しかしコンストラクタ初期化子では配列は初期化できないという罠。
尤もそのpairNameは静的メンバで平気だと思う。
class Poker {
private:
static const char *pairName[];
};
//どこかのcppファイル
const char *Pokar::pairName[] = {
"No Pairs",
"One Pair",
"Two Pairs",
(残りは省略)
};
0699デフォルトの名無しさん
2005/10/02(日) 12:41:18そもそも、単純に文字列(へのポインタ)の配列だけクラス内に用意しても仕方ないのでは?
常識的に考えれば役のEnum値か何かを引き数にして役の文字列を返す関数を実装して、
その関数内にその文字列テーブルを持てばいいと思うのだが。
0700デフォルトの名無しさん
2005/10/02(日) 13:31:34なるほど。
Pokerクラスはもちろん他に関数とかありますよ
0701デフォルトの名無しさん
2005/10/02(日) 13:38:50いやだから、Pokerというクラスの、全てのメンバがその文字列を必要とするわけでもないだろ?
「ポーカー」というゲームを考えても、その役名なんてぇのはI/Fにしか過ぎないわけだし。
0702デフォルトの名無しさん
2005/10/02(日) 17:30:11class tekitou
{
private:
int n_tekitou;
public:
tekitou(int n)
{
n_tekitou = n;
}
};
みたいなクラスがあって
tekitou* pTekitou = new tekitou[100];
こんな風にメモリ確保したときにコンストラクタtekitou(int n)
を呼び出したいんですけどどうすればいいんでしょうか。
コンストラクタで値を一気に全部入れたいんですけどできないんですかね?
0703デフォルトの名無しさん
2005/10/02(日) 17:46:37配列の new でコンストラクタに引数を指定することはできない。
コピーができるクラスなら
std::vector<tekitou> v(100,n);
0704デフォルトの名無しさん
2005/10/03(月) 00:44:32例外リストつきメンバ関数ポインタって・・・
int (MyClass::*pfunc)(std::string&) throw(std::exception) = MyClass::function1;
"throw(std::exception)"
↑この部分があっても無くてもコンパイル通るんですけど、あんまし重要じゃないんですか?
MyClass::function1 の宣言で、例外リストがあっても無くても、互換性の無い型の例外リストでも
コンパイル通るんですけど。
単にコンパイラが無視しているだけですか?
BCC使ってます。
0705デフォルトの名無しさん
2005/10/03(月) 01:04:340706デフォルトの名無しさん
2005/10/03(月) 01:28:180707デフォルトの名無しさん
2005/10/03(月) 01:56:10If any declaration of a pointer to function, reference to function, or pointer to member function has an
exception-specification, all occurrences of that declaration shall have an exception-specification with the
same set of type-ids.
とあるから、本来は無いといけないはずなんだけど、gcc3.4.2(MinGW)でも同じ
結果に終わるし・・・・ただ、MyClass::function1は通りませんよ。
&Myclass::function1としないと。
0708デフォルトの名無しさん
2005/10/03(月) 08:55:4315.4.12
"An exception-specification is not considered part of a function's type."
0709デフォルトの名無しさん
2005/10/03(月) 08:56:30JIS X3014:2003には代入・初期化する元の例外指定より代入・初期化する先の例外指定の制限が緩ければよいと書いてあるよ。
0710708
2005/10/03(月) 09:09:21ttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#92
0711デフォルトの名無しさん
2005/10/03(月) 13:40:23これか。ISO/IEC 14882:2003より
§15.4.3
A similar restriction applies to assignment to and initialization of pointers to functions, pointers
to member functions, and references to functions: the target entity shall allow at least the exceptions
allowed by the source value in the assignment or initialization. [Example:
class A { /* ... */ };
void (*pf1)(); // no exception specification
void (*pf2)() throw(A);
void f()
{
pf1 = pf2; // OK: pf1 is less restrictive
pf2 = pf1; // error: pf2 is more restrictive
.end example]
0712デフォルトの名無しさん
2005/10/03(月) 18:25:59またランダムで一桁の数字を出して、予想が当たりかはずれか、というゲームを
作りたいのですが、
#include<stdio.h>
#include<stdlib.h>// srand, rand 関数を使用するために必要
#include<time.h>// time 関数を使用するために必要
void main(void)
{
int i;// 現在の時刻値を使って、乱数ジェネレータを初期化
srand((unsigned)time(NULL));
for(i = 0; i < 1; i++);
printf("%d\n", rand() % 10);
int number;
scanf("%d", &number);
printf("%d\n", number);
printf("大きいのはどっち?\n");
}
int numberのところでエラーが出ます。どう直せばいいでしょうか。
環境Borland、BCCDeveloperです。おながいします。
0713デフォルトの名無しさん
2005/10/03(月) 18:28:59拡張子が.cppではなくて.cなら、int number を int i; の前か後ろに持って行け。
0714デフォルトの名無しさん
2005/10/03(月) 18:36:02cppにしてみたら違うとこのエラーが出ました。
Error Release\ikusei.mak 27: Too many rules for target 'Release\ikusei.obj'
*** 1 errors during make ***
これはなんでしょうか…
0715デフォルトの名無しさん
2005/10/03(月) 18:39:56もうちょっと考えてみます。
0716デフォルトの名無しさん
2005/10/03(月) 18:40:27|3`) ダレモイナイ・・LoveLove! ChuっChuっスルナラ イマノウチ
|⊂
|
♪ Å
♪ / \ LoveLove! ChuっChuっ!
ヽ川´3`)ノ LaLaLa ChuっChuっ!
( へ) ぎゅっとしてね 早く〜
く
♪ Å
♪ / \ 地球中で 貴方が一番
ヽ川´3`) ノ 大好きなの!
(へ ) 愛しちゃってるの!
>
0717デフォルトの名無しさん
2005/10/03(月) 18:42:07BCC Developerが作り出すmakefileを晒してみろ。
0718712
2005/10/03(月) 18:50:32.mak?
デバッグとリリースのとこに一つずつあるお(´ρ`)
PCの中身漏れません?
最高にド低脳な発言してください in ム板(VII)いってきまつ…
0719712
2005/10/03(月) 18:59:36int i; 2回やったら怒られます(´・ω・`)
0720デフォルトの名無しさん
2005/10/03(月) 19:05:340721712
2005/10/03(月) 19:09:17もうちょっといじってみます。
ありがとうございました
0722デフォルトの名無しさん
2005/10/03(月) 19:12:21最低限scanfの戻り値はチェックしてな
0723デフォルトの名無しさん
2005/10/03(月) 19:14:19↓はいどうぞ
0724デフォルトの名無しさん
2005/10/03(月) 19:15:47>>714でメイクファイル関連のエラーが出ているから言っているんだが。
晒すのが嫌なら残念ながらここまでだな。
0725デフォルトの名無しさん
2005/10/03(月) 19:26:21照れるじゃないかこんなところで
0726デフォルトの名無しさん
2005/10/03(月) 19:38:240727デフォルトの名無しさん
2005/10/03(月) 20:25:55Eclipse+CDTでVEは不可能なんですよね?
DelphiとVisualAge4Jしか知らないので1から勉強になるのは覚悟しています。
0728デフォルトの名無しさん
2005/10/03(月) 20:35:23VisualStudio 2005 Beta 2
Borland C++ Builder Personal
0729デフォルトの名無しさん
2005/10/03(月) 21:24:56BCB perは有償
0730デフォルトの名無しさん
2005/10/03(月) 22:12:42スマソ、Delphiと混同してたよ(´・ω・`)
0731デフォルトの名無しさん
2005/10/04(火) 00:14:29よくわからん、Eclipse+VEで作れば良いじゃん
それ以前にJDKだけで作れるじゃん
0732syosinsya
2005/10/04(火) 03:02:232値画像で注目点からN*Nの範囲にあるクロテンについて上辺と下辺のtangentを取り
その間の角度を取ります。角度を全クロテンについて集計してもっとも投票の多い角度を注目点における線方向とみなします。
で、N*Nの中身のドットすべてをクロテンにしたら全部の角度に対して同じ投票量になるはずですがなりません。
if(Threshold[loopTemp1]==1){
for(loopTemp3=0;loopTemp3<NWidth;loopTemp3++){
for(loopTemp2=0;loopTemp2<NWidth;loopTemp2++){
loopTemp4=loopY + LHight*loopX+loopTemp3-NWidth/2+LHight*(loopTemp2-NWidth/2);
if(Threshold[loopTemp4]==1){;
c=NWidth/2;
s=(c%2);
if(s==1)d=(double)c+0.5;else;
Xlength=(double)loopTemp2-(double)d+0.5;
Ylength=(double)loopTemp3-(double)d+0.5;
0733syosinsya
2005/10/04(火) 03:03:41if(Xlength>0){
if(Ylength>=0){
if(Xlength>Ylength){
tangent1=(Ylength+0.5)/Xlength;
tangent2=(Ylength-0.5)/Xlength;
for(t=0;t<180;t++){
if(tan[t]>=tangent2){
if(tan[t]<=tangent1){
Vote[0]++;
}
}
}
}
}
}
0734syosinsya
2005/10/04(火) 03:04:49if(Xlength>0){
if(Ylength>0){
if(Xlength<=Ylength){
tangent1=(Xlength+0.5)/Ylength;
tangent2=(Xlength-0.5)/Ylength;
for(t=0;t<180;t++){
if(tan[t]>=tangent2){
if(tan[t]<=tangent1){
t2=90-t;
Vote[1]++;
}
}
}
}
}
}
0735syosinsya
2005/10/04(火) 03:11:26これを第4象限までやります。
Vote[0],Vote[1]はチェックのために書き直していたものを投稿前に直すのを忘れていました。
それぞれVote[t],Vote[t2]と読み直してください。
文章がつたなくて申し訳ないですが、どなたかソースの誤りをご指摘いただけると幸いです。
それではよろしくお願いします。
0736デフォルトの名無しさん
2005/10/04(火) 07:19:07typedef struct {
LPDATA next; LPDATA last;
} DATA, *LPDATA;
の様に自己の名前で宣言する手段はありますでしょうか。
0737デフォルトの名無しさん
2005/10/04(火) 07:30:14typedef struct tagDATA {
struct tagDATA *next, last;
} DATA, *LPDATA;
0738737
2005/10/04(火) 07:31:22typedef struct tagDATA {
struct tagDATA *next, *last;
} DATA, *LPDATA;
0739デフォルトの名無しさん
2005/10/04(火) 07:34:00有り難うございます。
0740デフォルトの名無しさん
2005/10/04(火) 07:44:440741デフォルトの名無しさん
2005/10/04(火) 08:33:20その警告のメッセージを書け。
0742デフォルトの名無しさん
2005/10/04(火) 09:48:070743デフォルトの名無しさん
2005/10/04(火) 10:21:49そのくらい自分で書けと
0744デフォルトの名無しさん
2005/10/04(火) 11:08:54タグ名だけ名前かえるのやめてくれ。
0745デフォルトの名無しさん
2005/10/04(火) 11:09:180746デフォルトの名無しさん
2005/10/04(火) 11:23:21struct DATA;
の宣言でヘッダの依存関係作らずにポインタを扱う方法が使えない。
逆に聞くが、なんでタグ名だけ別にするの?何がいいことある?
0747デフォルトの名無しさん
2005/10/04(火) 11:34:360748デフォルトの名無しさん
2005/10/04(火) 12:11:020749727
2005/10/04(火) 12:50:54>>729
>>731
レスありがとうございます。
VEのSWTコンポはCDT上で扱えるのですか?
まだJavaだけかと思ってました。
勉強してきます。
0750デフォルトの名無しさん
2005/10/04(火) 14:52:29ランダムで一桁(10未満)の数字を2回表示させたいのですが、なぜか7桁の
数字が2回出ます。直してください。おながいします
void suuji1(int suujia);
void main(void)
{
printf("%dです。\n%dでした。\n", suuji1 );
}
void suuji1(int suujia)
{
int i;
srand((unsigned)time(NULL));
for(i = 0; i < 1; i++ )
printf("%d\n", rand() % 10);
}
0751デフォルトの名無しさん
2005/10/04(火) 14:55:47他の人に任せた。
0752デフォルトの名無しさん
2005/10/04(火) 15:00:190753デフォルトの名無しさん
2005/10/04(火) 15:03:120754デフォルトの名無しさん
2005/10/04(火) 15:07:53全部ダメ
最初から考え直せ
0755デフォルトの名無しさん
2005/10/04(火) 15:10:30ヒントをもらえませんか?
0756デフォルトの名無しさん
2005/10/04(火) 15:12:020757750
2005/10/04(火) 15:17:06{
int i;
srand((unsigned)time(NULL));
printf("%dです。\n%dでした。\n",rand() %10, rand() %10);
}
こんぱくとにしてみた
できたみたい
0758デフォルトの名無しさん
2005/10/04(火) 15:17:55コンパイル通るのか?
余計な考えは捨ててまずはmain関数からだ
void main(void){
printf("%dです。\n%dでした。\n", suuji1 );
}
1.main関数の戻り値の型
2.printf関数の引き数の数
3.return 0;
0759デフォルトの名無しさん
2005/10/04(火) 15:31:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/952.txt
よろしくお願いします。
0760デフォルトの名無しさん
2005/10/04(火) 15:37:18突込みどころ満載なので、一から勉強しなおしてください。
0761デフォルトの名無しさん
2005/10/04(火) 15:44:220762デフォルトの名無しさん
2005/10/04(火) 15:53:030763750
2005/10/04(火) 16:23:25直してみました
void main(void)
{
int i;
int number;
srand((unsigned)time(NULL));
printf("%d\n\n",rand() %10);
printf("これより大きいか小さいか当ててください\n大きい b\n小さい s を押してください\n\n");
scanf("%d", &number);
printf("結果は%dでした。\n", rand() %10);
if(number)
printf("当たり!\n");
}
ifのところがよく分かりません。
0764デフォルトの名無しさん
2005/10/04(火) 16:31:180765デフォルトの名無しさん
2005/10/04(火) 16:32:46悪いが何がしたいのかさーっぱりわからん
0766デフォルトの名無しさん
2005/10/04(火) 16:36:43とりあえず、お前が書こうとしてるものをフローチャートなりに書き直してみろ
0767デフォルトの名無しさん
2005/10/04(火) 16:37:23それを考える前に
750が何故ダメで
757が何故出来たのかを
ちゃんと理解しておいたほうがいいぞ。
0768デフォルトの名無しさん
2005/10/04(火) 16:38:22環境によるし、別にエラーにはならんが、
一般に広く使われてる、UnixだとかWinだとかのOSでは、
mainの戻り値はvoidじゃなくてint
0769デフォルトの名無しさん
2005/10/04(火) 16:40:08ついでに言うとCの仕様でもintか
0770デフォルトの名無しさん
2005/10/04(火) 16:47:000から勉強し直した方がいいよ
0771デフォルトの名無しさん
2005/10/04(火) 17:14:07こんな風にバイナリエディタで開くと0000900100と
アドレスに表示される様にしたいのですが、
16進法で保存すればいいのでしょうか?
wsprintf(buf , "%x" , 0x009001);
の様にbufを出力したのですが、うまくいきません。
どうすればいいのか教えてください。お願いします。
0772デフォルトの名無しさん
2005/10/04(火) 17:16:51な、なんか狐につつまれたような |
気がする・・・。 .|
_____ _________/
V
∧_∧
/ ヽ
| ` ´|
<>○<>\= o/
// ヽ\⊂ ̄ , ヽ
/ ∧_∧ヽ  ̄ ヽ
/,( ;´∀`)ヽ ,ゝ |___, ヘ
| ヽ\`yノ )( | < |
ヽ ___ノ_と_ノ\_<_ノ
0773デフォルトの名無しさん
2005/10/04(火) 17:22:13まず
「バイナリエディタとは何か?」
から、勉強し直した方がいいぞ。
0774デフォルトの名無しさん
2005/10/04(火) 17:22:13printf系じゃなくてfwriteを使え。
つか、その前にテキストとバイナリの違いを理解しる!
0775デフォルトの名無しさん
2005/10/04(火) 17:23:05バイナリエディタがあるなら、バイナリエディタ使えばいいだろ。
0776デフォルトの名無しさん
2005/10/04(火) 17:28:00とだけ書いたtxtをバイナリエディタで開いてみればわかる
0778750
2005/10/04(火) 17:44:52>>765簡単なゲームを作りたいです。
>>766あとでします…
>>767引数の数ちがた、for文いらなかた
>>768>>769ラジャーです
>>770作りながら勉強
0779750
2005/10/04(火) 17:46:35{
inti;
intnumber;
//inta, b;
srand((unsigned)time(NULL));
printf("%d\n\n",rand() %10);
printf("これより大きいか小さいか当ててください\n大きい 1\n小さい 2 を押してください\n\n");
scanf("%d", &number);
switch(number)
{
case 1:
printf("当たり\n");
break;
case 2:
printf("はずれ\n");
break;
default:
printf("入力が違います\n");
break;
}
printf("\n結果は%dでした。\n", rand() %10);
return 0;
}
0780750
2005/10/04(火) 17:48:070781デフォルトの名無しさん
2005/10/04(火) 17:50:37あとでします…
あとでします…
フローチャート書いてから作れば、
>for文いらなかた
こんなことはおきない。
先に書け。
頭の中でまとまっていない物が、プログラムに起こせる訳が無かろう。
0782デフォルトの名無しさん
2005/10/04(火) 18:04:57せめてコンパイルできるコードを書いて、それをコピペしろ。
(intとiをタブで区切ってるのかも知れんけど・・・・・・)
0783デフォルトの名無しさん
2005/10/04(火) 18:06:49のが明白なので、以降スルーするがよし。
0784デフォルトの名無しさん
2005/10/04(火) 18:18:42やっぱ無理ですか?
0785デフォルトの名無しさん
2005/10/04(火) 18:22:35前方宣言
0786デフォルトの名無しさん
2005/10/04(火) 18:23:08そんな作りありえん
0787デフォルトの名無しさん
2005/10/04(火) 18:23:10コンパイルは通るように出来るが基本的に設計ミス
0788デフォルトの名無しさん
2005/10/04(火) 18:35:37おお、さんくすできました。
そんなのがあったのか
はい、設計ミスです。うう
0789デフォルトの名無しさん
2005/10/04(火) 18:42:010790デフォルトの名無しさん
2005/10/04(火) 18:44:50派生先の仮想関数で処理すべき事をやらせてるんじゃないの
0791デフォルトの名無しさん
2005/10/04(火) 18:46:22wofstreamはUNICODE用なんだから引数の型はcanst wchar_t*がいいような気がするのですが…。
納得いきません。
0792デフォルトの名無しさん
2005/10/04(火) 19:06:250793デフォルトの名無しさん
2005/10/04(火) 20:49:09template <typename TYPE>
void Copy(TYPE *a, TYPE *b, int size)
{
if( IsPOD(TYPE) ) { // TYPE が POD ならメモリコピー
memcpy(a, b, sizeof(TYPE) * size);
} else { // POD でないならfor文で代入
for(int i=0;i<size;i++) a[i] = b[i];
}
}
みたいな事をやりたいのですが。 環境はVC++6.0です。
あとTYPEがPODでないとき、コンパイル時にエラーを発生させる事が可能でしたらそれも知りたいです。
0794デフォルトの名無しさん
2005/10/04(火) 20:55:16次の改訂で標準入りも確定している
0795デフォルトの名無しさん
2005/10/04(火) 20:56:55そう言うわけでしたか。
なるほど。考えが足りなかった見たいです。
ありがとうございました。
0796732
2005/10/04(火) 21:03:370797デフォルトの名無しさん
2005/10/04(火) 21:14:35だってそんなのデバッカで勝手にやりゃいいじゃん。
それで駄目ならそのソース内だけのバグじゃない可能性の方が大きい。
そういう手間まで考えるとそんなの自分でやれやタコ。馬鹿。ウンコ。
お前みたいな馬鹿に付き合ってるほどみんな暇じゃねーんだよ。
0798デフォルトの名無しさん
2005/10/04(火) 21:45:50よくわからんがdoubleを足してるみたいだけど計算誤差の処理はちゃんとやってる?
0799デフォルトの名無しさん
2005/10/04(火) 21:56:52windows 2000
C++ builder (borlandのタダのやつです)
なんですが。
以下のプログラムを走らせると、かならず入力前の文字列の値が
0 -16 -3 127 88
になります。
つまり、一回目の実行で11111って入力して49 49...
に変えても、二回目の実行では 0 -16...になるんです。
これって、どうしてなんですか?
#include <stdio.h>
void main() {
char sen[20];
int i;
for(i=0;i<5;i++) printf("%6d",sen[i]);
printf("\n");
scanf("%s",&sen);
printf("\n");
for(i=0;i<5;i++) printf("%6d",sen[i]);
}
0800デフォルトの名無しさん
2005/10/04(火) 22:05:27mainを呼ぶ前にCRTが作業した痕跡
0801799
2005/10/04(火) 22:10:19一つだけ・・
CRTって Cランタイムライブラリ で合ってますか?
0802デフォルトの名無しさん
2005/10/04(火) 22:11:190803デフォルトの名無しさん
2005/10/04(火) 22:14:070805デフォルトの名無しさん
2005/10/04(火) 22:15:460807デフォルトの名無しさん
2005/10/04(火) 23:11:27100MB単位のサイズのログファイルを加工してDBに落とし込むプログラムを作成しています。
行単位での処理とはいえ、fgets()で律儀に1行1行読んで処理してたら、さすがに時間を食って
仕方がないので、バイナリ扱いで10MBとかのサイズを一気に読んで処理しようと考えています。
ただ、1行の長さは固定ではないため、10MB分を読んだ際、ぴったりの位置に行の終端(\n)
があるとは限らない、という状態になっています。
今現在は、カレント位置から10MBの位置にファイルポインタを移動した後、whileループ
中で1文字ずつ読んで改行を検索、発見したらそのポインタ位置まで含められるサイズの
メモリを確保して、fseek()前の位置からの内容を読み込む、といった処理の流れになっていますが、
ループで1文字ずつ読む、というのが、最善手なのかわからないでいます。
現在のソースはこのような感じです(MFC利用)
uiCurrent = ReadFile->GetPosition();
ReadFile->Seek(DEF_READ_LEN,CFile::current);
while(post != '\r' || post != '\0'){
ReadFile->Read((LPVOID)&post,1);
}
uiSeekptr = ReadFile->GetPosition();
uiLenSize = uiSeekptr - uiCurrent;
retAddr = new char[uiLenSize +1];
どなたか、もっと良い手段についておしえていただけませんでしょうか?
0808デフォルトの名無しさん
2005/10/04(火) 23:26:3710M単位でデータを読んだ後、その中から改行を探して分割して、
結局は行単位で読むんでしょ?
それって、fgetsで先頭から1行ずつ読んでいくのと比べて本当に早いの?
0809デフォルトの名無しさん
2005/10/04(火) 23:30:09ディスクキャッシュ効くだろうし。
もしやるならifstreamだと現在位置をtellg、現在位置から10MBのところまでseekg、
そこからgetlineで行末まで読んでtellg、前の位置に戻ってread。
seekgの後とかストリームの状態を忘れずに確認すること。
まあこんなんで1行1行やるのとどのくらい変わるかは知ったこっちゃないがな。
0810デフォルトの名無しさん
2005/10/04(火) 23:38:58fgets()大推奨
気になるんならsetvbuf()でIOバッファのサイズ増やしてみ。
ほとんど効果は無いと思うけどね。
0811デフォルトの名無しさん
2005/10/04(火) 23:39:36下手な考え休むに似たり。
fgets()版で速度を測った? そしてそれは、単純にファイルコピーするのに較べて充分遅かった?
恐らく小手先の工夫をする甲斐はないと思うよ。
0812750
2005/10/04(火) 23:59:03みんなありがとうございました
0813750
2005/10/05(水) 00:02:19#include<stdlib.h>// srand, rand 関数を使用するために必要
#include<time.h>// time 関数を使用するために必要
int main(void)
{
int i;
int number;
int a, b;
while(i < 5)
{
srand((unsigned)time(NULL));
a=rand() %10;
b=rand() %10;
printf("\n%d\n\n",a);
printf("1〜9の数字を出します。\n上の数より大きいか小さいか予想してください\n大きい 1\n小さい 2 を押してください\n\n");
scanf("%d", &number);
printf("\n結果は%dでした。\n",b);
0814750
2005/10/05(水) 00:02:59{printf("あたり\n");}
else if(number == 1 && a>b)
{printf("はずれ\n");}
else if(number == 2 && a>b)
{printf("あたり\n");}
else if(number == 2 && a<b)
{printf("はずれ\n");}
else printf("入力が違います\n");
i++;}}
スレ汚しごめんでした
0815デフォルトの名無しさん
2005/10/05(水) 00:11:20細かい突っ込みは省略して二点ほど。
・乱数系列の初期化はループ内で行なってはいけない。
・条件判定は、「あたり」を列挙してそれ以外を「はずれ」とするのが妥当。
0816デフォルトの名無しさん
2005/10/05(水) 00:15:29>while(i < 5)
何これ?
0818750
2005/10/05(水) 00:23:03{
int i;
int number;
int a, b;
srand((unsigned)time(NULL));
while(i < 5)
{
a=rand() %10;
b=rand() %10;
>>815
ありがとうございます。こんなんでいいですか
条件判定のはもうちょっと考えてみます。
>>816
5回繰り返してみた
0819デフォルトの名無しさん
2005/10/05(水) 00:29:05素直にforで回せよ
0820デフォルトの名無しさん
2005/10/05(水) 00:30:44だから0から勉強し直せって言ってんだろ
i の初期値はどーしたよ
0821750
2005/10/05(水) 00:31:39if(number == 1 && a<b || number == 2 && a>b)
{printf("あたり\n");}
else if(number == 1 && a>b)
{printf("はずれ\n");}
else if(number == 2 && a<b)
{printf("はずれ\n");}
else printf("入力が違います\n");
どうでしょう
0822デフォルトの名無しさん
2005/10/05(水) 00:32:400824デフォルトの名無しさん
2005/10/05(水) 00:49:16>0からやってるじゃないですか
iに0入れてる部分はどこ?
0825750
2005/10/05(水) 00:50:16forが素直とは知りませんでした。ありがとう
int main(void)
{
int i;
int number;
int a, b;
srand((unsigned)time(NULL));
for(i = 0; i < 5; i++)
{
a=rand() %10;
b=rand() %10;
略
else printf("入力が違います\n");
}
return 0;
}
0826デフォルトの名無しさん
2005/10/05(水) 00:51:43>0からやってるじゃないですか
いつやったんだよ。
>1〜9なのに
10で割った余りだから0〜9なのは当たり前
もうほんと出直してきてくれ頼むから
0827デフォルトの名無しさん
2005/10/05(水) 00:52:380828デフォルトの名無しさん
2005/10/05(水) 00:58:330829デフォルトの名無しさん
2005/10/05(水) 00:58:43今みんなをウザがらせながらも変なプログラム作って勉強中
作らないと身につかないと思ったんです
勉強したところでどうせ動かしてみたらつまる。
出直します…
>>827
黙ります。すんません
0830デフォルトの名無しさん
2005/10/05(水) 01:13:110831デフォルトの名無しさん
2005/10/05(水) 01:55:160832デフォルトの名無しさん
2005/10/05(水) 01:59:35もちろんその間も自分で組む練習を怠っては駄目だけど。
0833デフォルトの名無しさん
2005/10/05(水) 02:10:15このレベルじゃ人様のソースなんて読めない読めない
0834デフォルトの名無しさん
2005/10/05(水) 02:28:56いや、C言語入門やアルゴリズム入門とかの
コードをたくさん丸写しして実行結果をみるってのを繰り返す
ってこと。
0835デフォルトの名無しさん
2005/10/05(水) 04:29:140836732
2005/10/05(水) 07:14:18798
どうもでした。
誤差のチェックやります。
0837807
2005/10/05(水) 09:42:27ほぼ同条件での計測で、807に書いたやり方では190秒、書き直した方では230秒…
前の方が早いようです。
CStdioFileだから遅いのでしょうか?
0838デフォルトの名無しさん
2005/10/05(水) 09:56:29てゆうかー。
それって処理速度云々が本当に問題なの?
時間がかかるのはもうどうしようもないんでしょ?
200秒かかる処理を100秒に縮められたらそれでOKな問題なの?
0839デフォルトの名無しさん
2005/10/05(水) 10:06:14まず、fgets()で一行毎に処理するプログラムを作れ。
そして、そのプログラムのプロファイルを取って、
全体の実行時間から、本当に遅いのか検討汁。
高速化は、プロファイルの結果からボトルネックとなっている箇所を割り出し、
その部分について、どうすれば高速化されるのか?を考えるのが普通だ。
0840デフォルトの名無しさん
2005/10/05(水) 10:44:250841デフォルトの名無しさん
2005/10/05(水) 14:14:24通常は839の言うとおり、プロファイルしてボトルネックを見つけてから最適化しないと
意味がない。推測でやるのは往々にしてムダになる。
とりあえずためしにDBにinsertしているところをコメントアウトして実行してみては?
190秒が10秒ぐらいになったりして。だとするとファイルアクセスを改善しても意味ナシ
あえて改善するのであれば、File Mappingでメモリに貼り付けて扱うとか。
それでも有意な差がでるとは思いませんが。
0842デフォルトの名無しさん
2005/10/05(水) 18:11:12つか、自分で客観的な計測や比較、加えて実装コードの評価ができないんじゃ
現時点で高速化はあきらめてきちんと作ることを優先したら? >>841にまとめて
ある程度の見識がなければ…
(807の方法がベストとも速いとも思わないが(メモリ喰っていいならmmap?)、
ごく簡単になら最後の半端行は切り捨ててseekでその分だけ戻して先送り。
その程度のロスがいやならデータ構造や処理手順を考え直すし…)
0843デフォルトの名無しさん
2005/10/05(水) 19:34:12俺が処理で意識するのは次の5つ。
1.処理時間が一瞬で、繰り返し処理を行ってもやはり一瞬で終わる
2.処理時間は一瞬だが、繰り返し処理を行うとちょっと時間がかかる
3.処理時間が結構長く、ユーザーに経過を伝える必要がある
しかし、メモリ内で処理を終えることができ、処理中のHDなどへの読み込み・書き込みは無い。
4.処理時間がかなり長く、ユーザーに経過を伝える必要がある
メモリ内で処理を終えることはできず、処理中もHDなどへの読み込み・書き込みを行わなければならない。
5.日がな一日中動かしている必要がある。
もう、処理中は最小化でもしてほっといてくれ。いつかは終わる。日付が変わることもあろうよ。
途中で電源が切れることもあろうよ。雨にも負けず風にも負けずそういうアプリに(ry
で、これがさ、高速化によって5が4になったり3が2になったりと
ランクが変わるぐらいじゃねーと俺は高速化ってやる意味ないと思うんだけどね。
200秒が100秒になってもねぇw
0844デフォルトの名無しさん
2005/10/05(水) 21:11:370845デフォルトの名無しさん
2005/10/05(水) 21:24:040846デフォルトの名無しさん
2005/10/05(水) 21:44:43高速化なんてそういう問題でしょ。
0847デフォルトの名無しさん
2005/10/05(水) 21:54:300848デフォルトの名無しさん
2005/10/05(水) 21:59:300849デフォルトの名無しさん
2005/10/05(水) 23:26:531/50秒と1/60秒は大きな違いだが、100秒と200秒じゃたいして変わらんよな。
0850デフォルトの名無しさん
2005/10/06(木) 00:12:140851デフォルトの名無しさん
2005/10/06(木) 04:41:430852デフォルトの名無しさん
2005/10/06(木) 11:03:09そういうシチュエーションはないでしょ?
現実的に考えて存在しないようなパターンを偉そうにもってきて、何、悦にいってるんだかw
会社でもこういう奴いるよ。
考えなくていいようなレアパターンをもってきて「これじゃ駄目だよ」とかいって騒ぎ出す馬鹿。
ホント仕事できねぇなら、寝てろよ、邪魔だから。
0853デフォルトの名無しさん
2005/10/06(木) 11:47:330854デフォルトの名無しさん
2005/10/06(木) 12:22:140855デフォルトの名無しさん
2005/10/06(木) 12:34:060856デフォルトの名無しさん
2005/10/06(木) 12:42:12>現実的に考えて存在しないようなパターンを偉そうにもってきて
現実的に考えて2000年まで使用するとは思わなかった。
そんな事が数年前にあったよねぇ。
0857デフォルトの名無しさん
2005/10/06(木) 13:05:51世界が1999年で終わると信じていたんだろw
0858デフォルトの名無しさん
2005/10/06(木) 13:06:47はぁ?
常 識 的 に 考 え て >>851 の 発 言 は ど う で す か ?
それがわからないほどあんたは馬鹿なんですか?
0859デフォルトの名無しさん
2005/10/06(木) 13:07:290860デフォルトの名無しさん
2005/10/06(木) 13:37:22常識的に考えて>>851は冗談だとわかりませんか?
まあそれはいいとして
>現実的に考えて存在しないようなパターンを偉そうにもってきて、何、悦にいってるんだかw
そういう姿勢はどうかと思うぞ。
危機意識足らねえんじゃないの?
0861デフォルトの名無しさん
2005/10/06(木) 14:03:09>>851が冗談なら君と会話する意味は無いよ。
さっさと消えろ。
0862デフォルトの名無しさん
2005/10/06(木) 14:13:250863デフォルトの名無しさん
2005/10/06(木) 15:53:340864デフォルトの名無しさん
2005/10/06(木) 16:47:49カップラーメンの待ち時間のあの空腹感の入り混じったもどかしさを思い出せ!
0865デフォルトの名無しさん
2005/10/06(木) 16:50:00最近待ち時間無しタイプのカップ麺しか食わない
0866デフォルトの名無しさん
2005/10/06(木) 17:18:400867デフォルトの名無しさん
2005/10/06(木) 17:46:59またお湯を入れる
待ち時間なしでウマー
って入れ替えてる間に3分たってるやん!!!
0868デフォルトの名無しさん
2005/10/06(木) 17:53:33でも沸かす時間の方が長いこともある。冬場とか。
0869デフォルトの名無しさん
2005/10/06(木) 17:54:480870デフォルトの名無しさん
2005/10/06(木) 18:20:51沸騰しないからまずいし、水道水以外使えないのもマイナスだな。
0871デフォルトの名無しさん
2005/10/06(木) 18:31:35コンパイルは通ったのですが、ファイルがオープンできません。
考えられる原因はなんですか?
自分で怪しいなって思ったところをUPしておきます。
bool AllToAscFileConvert( LPCTSTR lpszFileName, int nStep);
bool asd = AllToAscFileConvert("20051004142940_01000.all",2);
bool AllToAscFileConvert( LPCTSTR lpszFileName, int nStep)
{
FILE *allFp;
・
・
・
//all用ファイルを読み込みでオープン
allFp = fopen(lpszFileName,"rb");
if( allFp == NULL )
{
return false;
}
・
・
・
0872デフォルトの名無しさん
2005/10/06(木) 18:33:01電子ポットの方がまだマシだな
0873デフォルトの名無しさん
2005/10/06(木) 18:40:380874デフォルトの名無しさん
2005/10/06(木) 18:40:38ファイルが見つからないだけだろ、試しにフルパスで書いてみ。
0875デフォルトの名無しさん
2005/10/06(木) 19:19:02環境依存だと思います、作成環境はLinux。実行はGumstixという小型Linuxマシンです。
クロスコンパイラで作成する環境となります。
質問は「プロセス間通信」についてです。
只今Aというプログラムを作り、GPSからデータを抽出しています。
今後Bというプログラムで、このAに「抽出したデータをファイルへ書き出せ」
という指示を与え、それを受けたAがファイルを作成するという動作をさせたいと思っています。
つきましては、Bを作成する上で参考となるサイト様などは御座いますでしょうか?
プログラムをまたいでの操作は初めてなもので、是非ともお力添えを頂ければと思います。
宜しくお願いします。
0876デフォルトの名無しさん
2005/10/06(木) 22:40:03誘導した手前一応聞いておくけど、何故プロセスを分けるか、
例えばファイル経由ではいけない理由があるのか、
その辺りの背景が判らないと情報の提示もしにくいのだけれど。
0877875
2005/10/07(金) 09:25:14お答えします。率直に言うと、「色々な監視・管理をするプログラム」が必要だからです。
このBというプログラムはAに対しての制御の他、また別のプログラムや機器、
それらの情報を一手に引き受けて処理をする事を前提としているのです。
ですから確かにファイル通信でBがAへの指示をアペンド記述で行毎に指示し、
Aが逐次そのファイルを確認・処理をしても良いのですが、
制御する情報などが今後増大した場合、ファイルなどでは手に余るのではないかと思います。
…とはいえ、実際の所「やり方を覚えてみたい」という願望も否定出来ないのですが。
0878デフォルトの名無しさん
2005/10/07(金) 11:22:39このあたりとか
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-6.html
あとは普通にSocketで通信って方法も。
0879875
2005/10/07(金) 11:45:58ドンピシャです(汗) 今そこを読んでいました…
どうやら用途や方法、開発環境によって使うプロトコルは複数あるようですね。
暫く頭を捻らせてみる事にしたいと思います。
元々C言語なら…から誘導されて来たのですが、「プロセス間通信」という言葉を知らず、
遠回りな質問をしてしまっていた様です。お手間を取らせました、ありがとうございます。
頑張って習得したいと思います。
0880876
2005/10/07(金) 13:10:14確かにその辺だねw
パイプを使うとデバッグが楽というメリットもあるけど、データの遣り取りもあるならメッセージキュー、
資源管理がシビアならセマフォか。そのページだと全部書いてあるから一通り試してもいいかもね。
0881デフォルトの名無しさん
2005/10/07(金) 13:26:07いきなりメモリが不足していますのダイアログがでまして、
どうすればよいのか困ってます。再起動しても駄目でした。。。
タスクマネージャでみた
メモリ使用量
202268KB/550480KB
とりあえず載せておきます。。
よろしくお願いします。
0882デフォルトの名無しさん
2005/10/07(金) 13:56:370883デフォルトの名無しさん
2005/10/07(金) 14:44:17せめて原因が何で、どうやったら解決したかくらいは書いとけ
0884デフォルトの名無しさん
2005/10/07(金) 18:04:41const float PI = 3.14 ;
のように定数定義しています。
しかしこれはあればいいなというだけで必ず使うわけではないので、
使わない場合はコンパイル時に警告が出ます。
マクロにするというのもアレなので、ほかにスマートな回避方法はありませんか。
0885デフォルトの名無しさん
2005/10/07(金) 18:08:28そもそもその値では誤差が大きすぎて使い物にならないわけだが。
つーか、float型なんて使うなや。
それと、それでどんな警告が出るんだ?
警告が出るというなら貼って味噌。
0886デフォルトの名無しさん
2005/10/07(金) 18:30:36gnuなツールのautoconfパッケージのアイデアをパクってしまえ
ヘッダーでこんな感じに宣言しておいて
#indelu "config.h"
#ifdef USE_CONST_PI
const float IP=3.14;
#endfi
ユーザーソースとしてconfig.hをつくり
そこで使用する物の#define USE_xxxを作ってやる
0887デフォルトの名無しさん
2005/10/07(金) 18:33:13それで警告なんて普通でねぇ
>>886
そんなことするくらいならマクロにした方が簡単
0888デフォルトの名無しさん
2005/10/07(金) 18:37:010889デフォルトの名無しさん
2005/10/07(金) 18:42:070890884
2005/10/07(金) 18:48:32警告が出るのは BCC で -w オプションをつけたときで、デフォルトでは出ません。
普段はオプション無しで、デバッグ時にのみ付けるようにします。
0891デフォルトの名無しさん
2005/10/07(金) 18:56:05ヘッダでの変数宣言なら2重定義をはじくマクロくらい入れとけ
てか、普通入れる物だと思ってた俺ってアホ?
0892デフォルトの名無しさん
2005/10/07(金) 19:13:320893デフォルトの名無しさん
2005/10/07(金) 20:04:10見ちゃいけません・・!
0894デフォルトの名無しさん
2005/10/07(金) 20:31:37既存のCOMサーバーのATLオブジェクト(シンプルオブジェクト)があり、
これがコネクションポイント非サポートなんですが、
コネクションポイントのサポートをさせる事は可能でしょうか?
コネクションポイントのサポートをウィザードで指定した
ATLオブジェクトを作ってみて、IDL等真似して移植してみたのですが、
クライアントから DispEventAdvise した時に
0x80004002:インターフェイスがサポートされていません
エラーが出てしまいました。
素直にイベント配信用に新しいATLオブジェクトを作成した方がいいのでしょうか。。。
開発環境はVC6.0です。
よろしくお願いします。
0895デフォルトの名無しさん
2005/10/07(金) 22:05:35コンパイルエラーが発生してしまうのですが、
このような使い方はできないのでしょうか?
class CHoge {
public:
int& operator[]( int i ) { return x[i]; }
protected:
int x[1];
};
void main() {
CHoge a;
CHoge& b = a;
const CHoge& c = a;
a[0];
b[0];
c[0];
}
0896デフォルトの名無しさん
2005/10/07(金) 22:23:330897デフォルトの名無しさん
2005/10/07(金) 22:24:09constなオブジェクトはconstなメンバ関数しか呼び出せない。
const int& operator[](int i) const { return x[i]; }
を用意すれ
0898デフォルトの名無しさん
2005/10/07(金) 22:25:00InternetReadFile(hFile,myDataBuffer,(DWORD)(size),&dwSize);
ただヤフーのページのため,EUC-JPでエンコード(ディコード?)しないと文字化けします
C++ではどのようにしてエンコードするのでしょうか?
調べてみたところ,使えそうなのが
HRESULT ConvertINetString( LPDWORD lpdwMode,
DWORD dwSrcEncoding,
DWORD dwDstEncoding,
LPCSTR lpSrcStr,
LPINT lpnSrcSize,
LPBYTE lpDstStr,
LPINT lpnDstSize
);
ここでEUC-JP → UNICODEやShift-JISとしてみたものの,文字化けします
どのようにするのがいいでしょうか?
C#の場合は,非常に簡単にできるみたいです↓
//C#の場合
Encoding.GetEncoding("EUC-JP").GetString(myDataBuffer);
0899デフォルトの名無しさん
2005/10/07(金) 22:36:33通りました〜。
ありがとうございます。
0900デフォルトの名無しさん
2005/10/07(金) 22:50:10そもそも自作のライブラリで piを提供する必要があるとは思わないが、
(普通に math.h M_PIとか使いたい)
その糞ライブラリはオブジェクト.o,.aを提供するんだろうから、
警告もマクロもdefineも嫌ならヘッダには extern const double PI;
ぐらいしか書きようがないのでは。
0901デフォルトの名無しさん
2005/10/08(土) 00:38:53閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
0902デフォルトの名無しさん
2005/10/08(土) 00:39:36閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
0903デフォルトの名無しさん
2005/10/08(土) 00:43:34fwriteでunsigned charサイズのものをファイルに出力できないのでしょうか。
キャストしなくてはいけないはずなのですが、二次元配列のキャストも(int)のようなものを
変数の前につけるだけでいいのでしょうか。試してみたのですがうまく値を格納・出力できなかったもので。
どこにキャストの宣言をつけるのか解らないのでよろしくお願いします。
C言語、 VC 6.0、Win2000です。
double **arr2;
double *buff;
buff = (double *)malloc(sizeof(double) * (x * y));
arr2 = (double **)malloc(sizeof(double) * (y));
fread(&test1, sizeof(bit), 1, fp);
arr2[i][j] = test1;
fwrite(&arr2[i][j], sizeof(unsigned char), 1, fp);
0904デフォルトの名無しさん
2005/10/08(土) 02:15:45まさしくデバッグ中のプログラムが動きっぱなしなんだろ。
>>903
エラーメッセージを貼れ。
キャストは誤魔化しのためにあるのではない。
0905デフォルトの名無しさん
2005/10/08(土) 02:17:24ってことがやりたいんじゃないの?
その文面だけじゃよくわからんけど
0906デフォルトの名無しさん
2005/10/08(土) 06:41:22閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
0907デフォルトの名無しさん
2005/10/08(土) 08:14:24パソコンの電源落として窓から投げ捨てろ
0908デフォルトの名無しさん
2005/10/08(土) 08:17:22閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
0909デフォルトの名無しさん
2005/10/08(土) 09:18:37クライアントから、IPアドレス・ポート番号を入力せずに、又はIPアドレスのみ入力せずに、
起動しているサーバーを自動検索するにはどうすればよろしいでしょうか?
知っている方いましたらお教えください。
宜しくお願いします。
環境はVC6.0です。
0910デフォルトの名無しさん
2005/10/08(土) 09:23:55考えられる全IP、全ポートにpostして応答が返ってきたもの
0911デフォルトの名無しさん
2005/10/08(土) 09:25:570912デフォルトの名無しさん
2005/10/08(土) 09:57:05その方法は一番最初に考えついてつくってみたんですが、
検索にかなりの時間がかかってしまって、実用的ではなかったです。
時間短縮さえできれば、その方法でもいいとおもっているんですが。
>>911
やはり不可能なんですね。
ポート番号から、サーバーを探すことはできますか?
0913デフォルトの名無しさん
2005/10/08(土) 09:59:33クライアントがサーバのIPを使って接続するのではなく、
クライアントのIPを使ってサーバが接続するの。
#実は某官庁系ネットワークがそういうつくりだったり。
0914デフォルトの名無しさん
2005/10/08(土) 10:00:32無理だろ。
IPとポート番号が揃ってはじめてアクセスできる。
お前の家へは市町村だけ書いて番地を書かずとも郵便は届くのか。
0915デフォルトの名無しさん
2005/10/08(土) 10:02:35専用のプロトコル作れば良いだけでは?
0916デフォルトの名無しさん
2005/10/08(土) 11:39:240917デフォルトの名無しさん
2005/10/08(土) 12:25:43もともとその発想自体が実用的でも適切でもないんじゃね?
サーバ側が約束のportで適時ブロードキャストで情報をアナウンスするか、
クライアントからのリクエスト(ブロードキャスト)に返信するようにするか…
無駄だなあ。
0918903
2005/10/08(土) 12:46:48自分のやり方は
fwrite((unsigned chart*)&arr2[i][j], sizeof(unsigned char), 1, fp);
でやったのですが、エラーがでなくてファイルが空のままでした。
読み込み時も同じ感じでやった後に配列の中身をprintfで調べても空でした。
>>905
ありがとうございます。今すぐには試せないのですが。
最初から配列をint型で確保した時は出来たのですが、double型でなってしまったので確保しなくてはいけないので、
キャストは一時しのぎで使う時だけ型を変えればいいと言われたのでして。
0919デフォルトの名無しさん
2005/10/08(土) 13:06:14論理的に意味の取れない断片だけ提示してもまったく無意味だぞ。
動かせる程度の最小例ぐらいにまとめないと。
bitサイズだとかtest1の型だとか、不明な点ばかりなので。
そもそも何をしたいのかまったく意味をとれないようなコードだし、
int型で本当にできたのかどうかも怪しいぐらいだ…
0920デフォルトの名無しさん
2005/10/08(土) 13:41:48もともとdouble型をsizeof(bit)だけ読んだりsizeof(unsigned char)だけ
書いたりするって、何か勘違いしてやしないか?
エラーが出なくて空って、ちゃんと fwriteの返値でエラーチェックやってる?
まさか、double値の bitがちょうど zeroの部分を 1byte書き込んだのを
zero==空 と勘違いしてやしないよね?
0921デフォルトの名無しさん
2005/10/08(土) 13:55:28IEEE754を知らないとか言わないよな?
0922918
2005/10/08(土) 14:04:08for(i=0; i<20; i++){
for(j=0; j<20; j++){
fread(&Ko.test1, sizeof(bit), 1, fp);
log[i][j] = Ko.test1;
}
}
のように二次元配列に入れるもしくは出すことがしたかったものでして。
質問の仕方が悪かったのと基本的なところを理解しきれていなかったみたいです。
申し訳ありませんでした。基礎的なところをもっと詳しく調べてやり直してみます。
すみませんでした。
0923デフォルトの名無しさん
2005/10/08(土) 14:13:31ならなんで fread(&Ko.test1, sizeof(unsigned char), ... じゃないんだ?
初心者のトラブルなんだし返値のチェックぐらいきちんとしろよ。
つか、*何も*理解してないが故に質問さえまともにできないだけだな。終了。
0924デフォルトの名無しさん
2005/10/08(土) 15:17:35開発環境は WinXP Pro SP2 、VC++.NET です。
現在C++勉強のために多倍長整数のクラスを自作しております。
http://aploda.net/dl.php?mode=pass&file_id=0000004834
のような形で、クラスを書いてみました。 (operator+ はまだ実装してません。)
このクラスを使って
void CtestDlg::OnBnClickedOk() {
{
CInteger a(1);
CInteger b(2);
CInteger c;
c = a+b;
}
}
という関数を作ったところ、
c=a+b; から抜けたあたりで、 プログラムが落ちてしまいます。
エラーメッセージは
test.exe の 0x1020a702 (msvcr71d.dll) でハンドルされていない例外が発生しました :
0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。
というものです。
よろしくお願いいたします。
0926デフォルトの名無しさん
2005/10/08(土) 21:37:430927デフォルトの名無しさん
2005/10/08(土) 21:42:230928デフォルトの名無しさん
2005/10/08(土) 21:59:00operator +=はどうした。
あと、CIntegerのメンバ関数の中でもCInteger::を付けずにzeroとかの列挙へアクセスできる。
0929925 ◆95zCfWeGH2
2005/10/08(土) 22:25:58>>926
すいません。 以後気をつけます。
>>927
確かにそうでした。
>>928
operator += はまだ実装していません。 なにぶん、作っている最中なので。
後者の列挙型へのアクセスについては知りませんでした。 ありがとうございます。
ちなみに、未熟な腕で書き直して、こんな感じになりました。
http://aploda.net/dl.php?mode=pass&file_id=0000004837
しっかし、今度はoperator+の宣言が
CInteger operator+(CInteger&,CInteger&);
になってしまいました…… 値渡しは避けたいのですが、
なんとか、調べてみます。
どうもです。
0930デフォルトの名無しさん
2005/10/08(土) 22:28:14NULL を使うな! 0 にしろ
0931デフォルトの名無しさん
2005/10/08(土) 22:39:20operator +()の戻り値が値渡しになるのは仕方がない。
operator +=()があればoperator +()はすぐに作れる常套手段がある。friendにする必要もない。
CInteger operator +(const CInteger& left, const CInteger& right)
{
return CInteger(left) += right;
}
0932デフォルトの名無しさん
2005/10/08(土) 22:43:370933925 ◆95zCfWeGH2
2005/10/08(土) 22:51:36そうなんですか……orz
でも、見ててポインタと区別つかない……
>>931
おぉ、 確かにそうですね。
今から書いてみます。
みなさん、どうもです。
0934デフォルトの名無しさん
2005/10/09(日) 01:49:42if( boost::is_pod<TYPE>::value )
でできるみたいですね。ありがとう御座いました。
0935デフォルトの名無しさん
2005/10/09(日) 03:59:040936デフォルトの名無しさん
2005/10/09(日) 04:07:28n=(n+5)/10*10;
0937デフォルトの名無しさん
2005/10/09(日) 05:25:100938935
2005/10/09(日) 05:36:450939デフォルトの名無しさん
2005/10/09(日) 05:39:54それを指定した上での四捨五入が欲しいのか?
0940デフォルトの名無しさん
2005/10/09(日) 08:16:13(int)(d*1000 + 0.5)/(double)1000;
とか
0941デフォルトの名無しさん
2005/10/09(日) 09:42:45double round(
doublex, // 四捨五入する値
intr_pof // 四捨五入する位の逆数
) {
x = x + ( ( x >= 0 ) ? 0.5 : -0.5 ) / r_pof;
x = (int)( x * r_pof );
x /= r_pof;
return x;
}
0942デフォルトの名無しさん
2005/10/09(日) 12:12:53符号までいれるとそうなるな。
floor()やceil()ではうまくいかんし、キャストだけで何とかならんものか。
0943デフォルトの名無しさん
2005/10/09(日) 12:26:100944デフォルトの名無しさん
2005/10/09(日) 12:28:260945デフォルトの名無しさん
2005/10/09(日) 18:34:02あんまり難しい事はわからないです
0946デフォルトの名無しさん
2005/10/09(日) 18:36:19難しい事わからんのならまず難しい事がわかる頭になったほうが良い
マジで
0947デフォルトの名無しさん
2005/10/09(日) 18:54:09禿げしく同意。
0948デフォルトの名無しさん
2005/10/09(日) 19:49:480949デフォルトの名無しさん
2005/10/09(日) 20:06:19書いてある数値の合計を求めるという簡単なプログラムを作ったのですが
fopen関数でファイルを開く時ファイル名のファイルをパソコン中から
探すのでこのプログラムはとても時間がかかるのですか?
このプログラムを実行すると止まってしまったかのように長い
間何も表示されないのでパソコン中のファイルを探しているので
こんなに長い間待たされると思うのですがどうなのでしょうか?
0950デフォルトの名無しさん
2005/10/09(日) 20:07:08コンパイラオプション -tWM を付ける。終わり。
0951デフォルトの名無しさん
2005/10/09(日) 20:10:32fopen使っただけじゃパソコン中から探しません。
まずはそのプログラムを晒してみれ。
0952デフォルトの名無しさん
2005/10/09(日) 20:10:57お前のプログラムが何かとても無駄なことをしているに1票。
0953デフォルトの名無しさん
2005/10/09(日) 20:15:58そんなことはない。また、そのファイルが巨大だと言うのでもない限り、無闇と時間が掛かることもない。
何か誤解をしているんではないか?
いっそソースを晒して味噌。
0954デフォルトの名無しさん
2005/10/09(日) 20:38:260955デフォルトの名無しさん
2005/10/09(日) 20:38:32#include <stdio.h>
main(void)
{
double i, isum;
isum = 0;
for (i=1; i<=100;i++){
isum = isum + i;
printf("i=%d , isum=%d\n",i,isum);
}
return 0;
}
printfの中の%dを%fや%eにするときちんとi=100,isum=5050となってるんですが。
そもそもdouble倍精度ってなんなんでしょうか?
0956デフォルトの名無しさん
2005/10/09(日) 20:43:57入門書を再読してください。
0957デフォルトの名無しさん
2005/10/09(日) 20:44:35どうして、i がdoubleになっているんだろう?
って思ってみたら、そもそもdoubleを使っている理由がどこを見てもわからん。
0958デフォルトの名無しさん
2005/10/09(日) 20:47:15あべし
色々調べたんですが、要は最初の変数宣言のところでdoubleで宣言した変数は
printfでその変数を扱う型は%fか%eしかないってのが、調べて得た結果なんですが。
あってますか?
0959デフォルトの名無しさん
2005/10/09(日) 20:50:16えっとですね、流体中の粒子軌道計算プログラムがあるんですが、
それはFORTRANでかかれてまして、それをCに書き直せと命令されたもので。
途中計算の丸め誤差なんかも考慮してFORTRANでは倍精度で書かれてたので。
ちなみにCなんて授業でHalloって表示させるくらいしかやってない上にFORTRANも
全く分からないんで、今困ってるんですよ。
0960デフォルトの名無しさん
2005/10/09(日) 20:51:41わかったから教えろや(^^)
0961デフォルトの名無しさん
2005/10/09(日) 20:52:30調べるどうこうよりおとなしく入門書をはじめからもう3回ぐらい読み直せ。
貴方の場合考えたつもりになるのはその後からじゃないと無駄。
0962デフォルトの名無しさん
2005/10/09(日) 20:55:28歓迎やめてホイホイにでも書き換えやがれ!!
0963デフォルトの名無しさん
2005/10/09(日) 20:58:16FORTRANも勉強してからじゃないと、本当に何をしても無駄そうだな。
誤差も考慮して数値計算やるの、現状の実力じゃほぼ無理だろ。
0964デフォルトの名無しさん
2005/10/09(日) 20:59:130965デフォルトの名無しさん
2005/10/09(日) 21:00:53googleで一発だったから(^^)
google>教えてgoo>>>>>>>>>>>>>>>>thisスレ
だな(^^)
0966デフォルトの名無しさん
2005/10/09(日) 21:01:020967デフォルトの名無しさん
2005/10/09(日) 21:01:58いやさ、 書き直すんだったら、Cのデータ型の意味を考えて書き直さないといけないんじゃない?
どう考えても、上のプログラムでdoubleを使う意味がわからない。
doubleを使うと何が起こるかの勉強でもしているわけ?
0968デフォルトの名無しさん
2005/10/09(日) 21:02:38小数点(double)を整数(%d)として出力したら思い通りの結果は得られない、ってこと
0969デフォルトの名無しさん
2005/10/09(日) 21:03:06おまえは質問の意図を読み取る勉強でもしとけ( #^ω^)
0970デフォルトの名無しさん
2005/10/09(日) 21:03:09つまりgoogleで一発で出来るような初心者未満の質問はお断りです。
0971デフォルトの名無しさん
2005/10/09(日) 21:05:00googleで一発の質問に逃げてばっかのお前らはそれ以下って事か
0972デフォルトの名無しさん
2005/10/09(日) 21:06:45また質問プリーズ
0973デフォルトの名無しさん
2005/10/09(日) 21:08:17>>950で答え出てるけど、どの辺りが質問に逃げてるのでしょうか?
0974デフォルトの名無しさん
2005/10/09(日) 21:08:27以上、ここまで糞スレでした。以後クソスレをおたのしみください。
0975デフォルトの名無しさん
2005/10/09(日) 21:10:15具体的にソース示せってことだろ
日本語くらい理解しろよ
0976デフォルトの名無しさん
2005/10/09(日) 21:13:130977デフォルトの名無しさん
2005/10/09(日) 21:15:020978デフォルトの名無しさん
2005/10/09(日) 21:16:40自作自演ばかりになるな。俺みたいに!
0979デフォルトの名無しさん
2005/10/09(日) 21:52:54どうすればいいでしょうか?
0980デフォルトの名無しさん
2005/10/09(日) 21:54:460981デフォルトの名無しさん
2005/10/09(日) 21:58:47品質に拘らないなら、単に二分木で実装すれば良いんじゃない?
0982デフォルトの名無しさん
2005/10/09(日) 22:25:59そーすみてマクロで組め
0983デフォルトの名無しさん
2005/10/09(日) 22:46:57どうしてそういう状況に陥ったのかが気になるところだが
0984デフォルトの名無しさん
2005/10/09(日) 23:20:33例えばリターン処理とかgotoでまとめたほうが逆に見やすいときとかあるような気がするし…
たしかにあちこちにむやみに飛ぶとシースがわかりにくくなるのはわかるんですが。
それとも何かコンパイルの段階とかで問題があるのかな??
今ひとつ駄目といわれる理由がよくわかりません。
0985デフォルトの名無しさん
2005/10/09(日) 23:22:390986デフォルトの名無しさん
2005/10/09(日) 23:25:08つ り
0987デフォルトの名無しさん
2005/10/09(日) 23:30:11使いすぎるといかんことは間違いないが。
使ったほうが(客観的にも)わかりやすく記述できるなら、使えばいいんじゃない。
0988デフォルトの名無しさん
2005/10/09(日) 23:32:30gotoを使うことにより、ロジックが明確になるなら使うべきだ。
goto使わんで良い場面で使う奴は抹殺するべきだがな。
0989デフォルトの名無しさん
2005/10/09(日) 23:52:43早々起きるような事じゃないと思うけどな
俺は処理が飛ぶのが嫌いなんで一切使わないが
0990デフォルトの名無しさん
2005/10/09(日) 23:59:58そうするとスパゲッティになる奴。
0991デフォルトの名無しさん
2005/10/10(月) 00:26:17普通に goto 使います。
0992デフォルトの名無しさん
2005/10/10(月) 00:33:330993デフォルトの名無しさん
2005/10/10(月) 00:35:150994デフォルトの名無しさん
2005/10/10(月) 00:36:040995デフォルトの名無しさん
2005/10/10(月) 00:36:23,ooooooooooooooooooooooooooooooo
tttttttttttttttttttttttttttttttttttttttttttttttttt
,ooooooooooooooooooooooooooooooo
0996デフォルトの名無しさん
2005/10/10(月) 00:37:46//初期化
if(!InitUnko()){
error_state = "OUT_SIDE_BIG";
goto MISS;
}
//初期化
if(!InitShikko()){
error_state = "OUT_SIDE_SMALL";
goto MISS;
}
return true;
MISS:
ReleaseUnko();
ReleaseShikko();
return false;
みたいなw
この例だと2つだけど、5つも6つも続くときってあるじゃんよ。
0997デフォルトの名無しさん
2005/10/10(月) 00:39:370998デフォルトの名無しさん
2005/10/10(月) 00:41:23DirectXでよく見るパターンだけど
関数にまとめてgotoの変わりにreturnかな
0999デフォルトの名無しさん
2005/10/10(月) 00:42:381000デフォルトの名無しさん
2005/10/10(月) 00:45:2010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。