マンガでよめる痔のこと・薬のこと

私事ですが、用事で祖父宅に来ており、そこでインターネット接続してみました。
ところで、DreamCupというオンラインゲームがあります。そこで接続しようとすると10054 非同期ソケットエラー とのエラーが発生しました。これは・・と思いMSN MessengerおよびYahoo!Messengerもダウンロード、接続してみましたが、MSNでは80072476エラー、Yahooでは接続画面でフリーズし、接続不可の状態でした。

10054を頼りに探してみて、WinsockかTCP関連のエラーではないかと思っているのですが、解決方法がとんと見当つきません;;
Keep Aliveという言葉も散見されたのでレジストリの値もいろいろといじってみたのですがまったく変わりませんでした。

ちなみに、こちらは光ファイバー接続、使用ルータはPR-200NE、パソコンはSONY VAIOのPCVシリーズ、OSはWindows Meです。

どなたか解決法のほうご教授ねがいます;;

このQ&Aに関連する最新のQ&A

A 回答 (1件)

http://www.nipponsoft.co.jp/faq/200/20015_networ …
とありますので、もしかしたらネットワーク関連に問題があるのかもしれません。

ネットワークを構築している場合は、IPアドレスの重複がないかどうか、またルーターの設定、接続の設定などは正しいかどうか確かめててみてください。

また、セキュリティ対策ソフトウェアが、コンピュータのインターネットなどのネットワーク通信を制御している可能性が考えられます。正しく設定を行わないと、利用できない場合があります。

また、パソコン自体が固まってしまう原因として、スペック面に問題があったり、処理能力に問題があったり、ウィルスなど悪意のあるプログラムがバックグラウンドで作業をしている可能性があったり、ネットワークに問題があるのを自動解決しようとすることが原因で大きな負荷がかかっている可能性が考えられます。システム全体でなにか問題がないかどうか確かめてみてください。

この回答への補足

セキュリティソフトはインストしておりません。

IPアドレスなどのチェックしてみます。

他の方も、回答の方よろしくお願いします。

補足日時:2007/03/24 23:50
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアプリケーション終了時例外エラー(アクセス違反)の調査方法について

大変困っています。

アプリケーションが終了するときに「アクセス違反」がワトソン博士によって取得されています。
当方アプリケーションなどに弱く、解決策の想像が付きません。どなたかご教授お願いいたします。

<解決策例>
・どういったスキルを持った人にどの様な調査を進めさせれば良いのか。。。
・以前同様な事があり原因は○○だった
・恐らく○○だろう
 など、お願いいたします。

<ユーザ報告>
処理終了し、画面が消えたところでワトソン博士のメッセージが表示された

<ログ抜粋>
例外番号c0000005(アクセス違反)

ファンクション:RtlDestroyHeap
~略~
フォールト → 77f6d672 8908 mov [eax],ecx ds:09000001=00000000

<備考>
開発環境:MSVC6.0
動作環境:Windows NT4.0 SP6a
発生頻度:2回/年
使用頻度:2~3回/(平日)

以上、よろしくお願いします。

Aベストアンサー

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB自体は特定のアプリケーションについて書かれていますが、記述されている現象と原因の関係から考えるに、他のアプリケーションでも同様の現象が発生すると思われます。

さてさて。

せっかく書いた文章を捨てるのがもったいないので(貧乏性)、邪魔かもしれませんが下に続けることにします。もし上のKBの内容がそれらしいようであれば、読み飛ばしてください。

========

私であれば、次の手順で調査を行います。

1. MAPファイル、CODファイル作成

「ワトソン博士のログを取得した際に実行していたEXEファイル」をビルドした際、一緒にMAPファイルやCODファイル(リスティングファイル)を作成していれば、そのファイルを用意しておきます。

もし作成していない場合は、「ワトソン博士のログを取得したEXEファイル」と、バイナリレベルで全く同じEXEファイル(バイト単位で比較すると、ファイルに埋め込まれたタイムスタンプ・チェックサム以外は一致する)が作成可能かどうか調べます。(ビルドに必要なソースファイルやビルドオプションに変更を加えていなければ作成可能です。)

作成可能であれば、コンパイルオプションに「リスティングファイルタイプ:マシン語コードとソースを含む」、リンクオプションに「MAPファイル作成」を追加してEXEを再作成してください。これで、「ワトソン博士のログを取得した際に実行していたEXEファイル」に対応するMAPファイルとCODファイルが得られます。

2. エラー発生行を特定

ワトソン博士のログがどれだけ取れているかにもよりますが、スタックダンプが含まれていればたいていエラー発生行を特定できます。

まず「フォールト->」が含まれる逆アセンブルリストを探します。次に、その下にある「スタックバックトレース」を探します。

スタックバックトレースを上から下に順にたどっていくと、そのうち「ReturnAd」(リターンアドレス)がアプリケーションのアドレス範囲(VC++6の標準オプション設定を変更していなければ0x00400000~)に入るところが出てきます。見つかったら、そのアドレスの直前にあるcall命令が例外を発生させたAPIを直接呼び出している場所です。

さて、仮にリターンアドレスが0x00401234だったとします。そうしたら、次はMAPファイルを見てこのアドレスがどの関数に属しているか探します。ちょうど0x00401234というアドレスは見つからないでしょうけれども、これに近いアドレスは見つかるはずです。そのアドレスに対応する関数名もMAPファイルにあります。

次はその関数名をCODファイルから探します。見つかったら、MAPファイルにあるアドレスがCODファイルにあるマシン語コードの先頭アドレスになるので、そこからリターンアドレス0x00401234に対応するはずの場所まで順番にアドレスを辿っていきます。関数の先頭アドレスが0x00401200であれば、0x34バイト先を探すわけです。

そうすると、その探した場所にある命令の直前の命令がcall命令になっているはずです。CODファイルには、その場所のC++ソースでの行番号とソース文もコメントとして入っているはずなので、あとは対応するソースをよーく見てエラーの見当をつけてください。

アセンブラの知識があれば、そこでcallを使った(他の関数を呼び出した)ときの引数の内容もある程度分かります。(ポインタ渡しだと、そのポインタの先の内容までは分かりませんが。)

3. 置き換え用EXEファイルと対応するMAPファイル作成

これ以降は将来への備えです。

コンパイルオプションでデバッグ情報を「プログラムデータベースを使用」、リスティングファイルタイプを「マシン語コードとソースを含む」、リンクオプションで「MAPファイルを作成する」、デバッグ情報「他の種類」を追加してビルドし、出来たEXEファイルを本番用として使用します。同時に作成されるMAPファイル、CODファイル、PDBファイルは保管しておきます。

MAPファイル、CODファイルの使い方は上記2.のとおりです。PDBファイルは、もし完全なクラッシュダンプが取得できればWinDbgを使って事後ソースレベルデバッグが可能になりデバッグ作業が非常に楽になるので、念のため取っておきます。

4. ワトソン博士のオプション変更

drwtsn32.exeを起動し、「クラッシュダンプファイルの作成」をチェックします。(デフォルトは、チェックが入っています。)

クラッシュダンプファイルとEXEとPDBがあればWinDbgで事後ソースレベルデバッグができます。(いわゆるポストモーテムデバッグです。UNIX系でコアダンプしたコアをデバッガで読み込んでデバッグするのと同じ種類のものです。)


普段何とも思わずに行っていることでも、文章にすると長いですね・・・

えーと、「どういうスキルを持った人に調査させればいいか」については、上記の内容を読んで『なるほど!』と言える人でしょうか。

参考URL:http://support.microsoft.com/kb/168006/ja

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB...続きを読む

QWinsockで、localhostに接続時、10061エラー、コンピューター名ならOk

VB6.0(SP5)で、TCP/IPの通信を作成しています
開発環境は、Windows2000(SP4)
実行環境は、WindowsXP Home(sp2)です

Winsockコントロールに以下の値を設定していますが接続時にエラー:WSAECONNREFUSED 10061 Connection refusedを返します

.LocalPort = 0
.RemoteHost = "localhost"
.RemotePort = 2010
.Connect
(.RemoteHost = "127.0.0.1"でも同じです)

しかし、
.RemoteHost = "192.168.0.110" 自身のIPアドレス
.RemoteHost = "COMP01" 自身のコンピューター名
を指定した場合エラーとなりません

何かアドバイスを頂ければお願いします

Aベストアンサー

接続しようとしているサーバーも自作でしょうか?
だとしたら,そのサーバーがlocalhostに対してサービスを提供していないのでしょう.
TCP/IPサーバは,サーバのIPアドレスを指定することもできますししないこともできます.
アドレスを指定しなければ,そのマシンが持っている全てのIPアドレスでサービスを提供します(ご質問のマシンの例では,192.168.0.110と127.0.0.1ですね.サーバー側IPアドレスを指定してしまった場合は,そのアドレス限定でサービスを提供します.というわけで,192.168.0.110の2010番ポートだけ待ち受けている状況で127.0.0.1に接続しようとするとconnection refusedになります.

あとは,パーソナルファイヤウォールなどの設定の影響という可能性もありますが.

QSocketのSend関数でのCLOSEの検知 [Linux]

Linux環境でSocket(dm:PF_INET,type:SOCK_STREAM)を使用しての、
Client&ServerプログラムをCで作成しているのですが、
そこでのSend関数の使い方についてご助力ください。

Client&Serverプログラムは下記のような動きをします。

[Client]
ServerへConnectした後、複数のDataを数秒間隔でServerへ
送信(send関数使用)します。受信(recvやread関数等)は、
一切行いません。

[Server]
ClientからのConnectを受け付けた後、Clientから受信(recv関数
使用)したDataを標準出力へ表示する。送信(sendやwrite関数
等)は、一切行いません。


さて、ここでもしClientプログラムがCloseを発行したり、マシン
DOWN等の理由でConnectionが切断され、Server側のSocketが
CLOSE_WAIT状態になった場合、Bufferに溜まっていたDataを
すべて受けきった後、recv関数が0を返してくれるので
相手が終了したことがわかります。

ここからが質問のMainです。

では、もしServerプログラムがCloseを発行したり、マシン
DOWN等の理由でConnectionが切断され、Client側のSocketが
CLOSE_WAIT状態になっても、CLOSE_WAIT直後のsend関数が
なぜか正常に処理されてしまいます。無論このDataは、
Server側は受け取りません。この次のsend関数実行時に
EPIPEが返ってくるので、ここでようやくSocketが切断された
ことが判ります。

これを何とかCLOSE_WAIT状態になった直後から、send関数で
切断を検知できるようにできないでしょうか。

よろしくお願いします。

以上

Linux環境でSocket(dm:PF_INET,type:SOCK_STREAM)を使用しての、
Client&ServerプログラムをCで作成しているのですが、
そこでのSend関数の使い方についてご助力ください。

Client&Serverプログラムは下記のような動きをします。

[Client]
ServerへConnectした後、複数のDataを数秒間隔でServerへ
送信(send関数使用)します。受信(recvやread関数等)は、
一切行いません。

[Server]
ClientからのConnectを受け付けた後、Clientから受信(recv関数
使用)したDataを標準出力へ表示する。送信(se...続きを読む

Aベストアンサー

#3です。
>完全な保証ではないのですが、”送れた/送れない”をきちんと
ログとして残す必要があるのです。

なるほど、そういう事情でしたか。それだと、それなりの信憑性が要求されますね。

>それと最初にご提案いただいたrecvをNonBlockモードで呼び出す
方法ですが、これだとrecvのリターン値は0が返ってこないでしょうか?

Linuxで以下のような、プログラムを組んで確認しました。

//送信前に、ノンブロッキングでrecvする。
ret = recv(sock,rbuf,sizeof(rbuf),MSG_DONTWAIT);
if (ret == -1 && errno == EAGAIN){
//正常なので送信可能
ret = send(sock,msg[i],sendlen,0);
if (ret != sendlen){
//送信エラーの処理
}
}else{
//切断検知時の処理
 // CLOSE_WAITになると ret=0が返る
}

サーバー側で切断時、直ちにrecvで戻り値=0となり、エラーの検知ができました。ret==-1 かつ errno==EAGAIN
であれば、回線は正常状態です。

#3です。
>完全な保証ではないのですが、”送れた/送れない”をきちんと
ログとして残す必要があるのです。

なるほど、そういう事情でしたか。それだと、それなりの信憑性が要求されますね。

>それと最初にご提案いただいたrecvをNonBlockモードで呼び出す
方法ですが、これだとrecvのリターン値は0が返ってこないでしょうか?

Linuxで以下のような、プログラムを組んで確認しました。

//送信前に、ノンブロッキングでrecvする。
ret = recv(sock,rbuf,sizeof(rbuf),MSG_DONTWAIT);
if (ret == -...続きを読む

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。

QTCP/IP のパケットの分断と結合について

linux で socket を使ってプログラムを作っております。
パケットの頭に、どんな種類のパケットかの情報を入れ、それに続く部分にデータを入れて送っております。受信側では、届いたパケットの頭の情報を見て必要な処理を行う、という流れになっております。
ところが、時々、次のような現象が発生して困っております。

・送信側で一回のsendで送ったはずのデータが受信側では一回のrecvで届かず、二回のrecvで届く。
・送信側では二回のsendで送ったつもりなのに、受信側では一回のrecvで2つのパケットが結合したデータが届く。

これはsendとrecvでは普通に起こると想定しなければならない現象なのでしょうか?
それとも、linuxマシンの設定に問題があるのでしょうか?

Aベストアンサー

>・送信側で一回のsendで送ったはずのデータが受信側では一回のrecvで届かず、二回のrecvで届く。
>・送信側では二回のsendで送ったつもりなのに、受信側では一回のrecvで2つのパケットが結合したデータが届く。

TCPは「ストリーム」なのでそういう動作をしても不思議ではない。
ということになります。

>それとも、linuxマシンの設定に問題があるのでしょうか?

Windowsでも普通に発生します。

http://www.ne.jp/asahi/hishidama/home/tech/socket/tcp.html
send(送信)、recv(受信)や
http://www.ne.jp/asahi/hishidama/home/tech/socket/index.html#%E9%9B%BB%E6%96%87%E3%81%AE%E7%B5%82%E4%BA%86%E6%A4%9C%E7%9F%A5
等を参照…でしょうか。
# 他にもそういった解説をしているページはあるでしょう。
http://rgv250.dyndns.org/socket.htm

http://hp.vector.co.jp/authors/VA019876/sokrpg/doc/SockFAQ/sfaq01.html
の「たまに、受信したレコードの最後が途中で切れていることがあります。どうしてでしょうか? 」とか…

>・送信側で一回のsendで送ったはずのデータが受信側では一回のrecvで届かず、二回のrecvで届く。
>・送信側では二回のsendで送ったつもりなのに、受信側では一回のrecvで2つのパケットが結合したデータが届く。

TCPは「ストリーム」なのでそういう動作をしても不思議ではない。
ということになります。

>それとも、linuxマシンの設定に問題があるのでしょうか?

Windowsでも普通に発生します。

http://www.ne.jp/asahi/hishidama/home/tech/socket/tcp.html
send(送信)、recv(受信)や
http://www.ne.jp...続きを読む

QWinsockの通信処理にてファイル転送方法?

環境:Windows2000とUNIXサーバ
開発:VisualStadioVer6.0
言語:C言語

やりたいこと:
   クライアントからサーバにファイル送信を行う。

ただし、FTP通信を使わないで、別ポートにて、Winsockの
send等でFTPもどきのファイル送信を行いたい。

ソケット通信はデータ送信なのは知っているのですが、
どうしても実現したいので、知ってる方は教えてください。

Aベストアンサー

普通にできますよ。
socket(),bind(),listen(),accept()
socket(),connect()
等で socket()をセットアップしたら
こんな感じでやるだけです。

int socket;
char buf[4096];
const char* filename;
FILE *file;
int num_read;

送るほう:
if( !(file = fopen(filename,"rb")) ) return;//error
while( num_read = fread(buf,sizeof(buf),1, file) )
if( write(socket,buf,num_read) < num_read )
return; //error
}
受け取るほう:
if( !(file = fopen(filename,"wb")) ) return;//error
while( num_read = read(socket,buf,sizeof(buf)) )
if( fwrite(buf,num_read,1,file) < num_read )
return; //error
}

普通にできますよ。
socket(),bind(),listen(),accept()
socket(),connect()
等で socket()をセットアップしたら
こんな感じでやるだけです。

int socket;
char buf[4096];
const char* filename;
FILE *file;
int num_read;

送るほう:
if( !(file = fopen(filename,"rb")) ) return;//error
while( num_read = fread(buf,sizeof(buf),1, file) )
if( write(socket,buf,num_read) < num_read )
return; //error
}
受け取るほう:
if( !(file = fopen(filename,"wb")) ) return;/...続きを読む

QPL/SQLでログを確認したい。

以下のPL/SQLで取ってきた値をログか何かで確認したいのですが、いい方法がありますか?
想像では5行目あたりにログはきだす記述をするのかなと思うのですが、方法がわかりません。
どなたか教えてください。

--------------------------------------------
1select count(*) into vn_CNT from t_ukerui
2where no_toi = :new.no_toi
3 and no_uke = :new.no_kyaku
4 and no_gyo = 1;
5
6if ( vn_CNT > 0 ) then
7
--------------------------------------------

Aベストアンサー

参考URLをみていただければ分かりますが。
例えば、サーバのDドライブのtempフォルダにtest.txtというログファイルを出力するのであれば。
--------------------------------------------------
OUT_FILE UTL_FILE.FILE_TYPE;

BEGIN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','A');
EXCEPTION
WHEN OTHERS THEN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','W');
END;
UTL_FILE.PUT_LINE(OUT_FILE,'(vn_CNT = ' || vn_CNT || ')');
UTL_FILE.FCLOSE(OUT_FILE);
--------------------------------------------------
こんな感じでしょうか。
ログファイルがあれば追加、なければ新規で作成、件数のメッセージを一行書いて、最後にクローズしています。
これを実行すると、

(vn_CNT = 1)
(vn_CNT = 5)
(vn_CNT = 0)

のように出力されます。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl07_1.htm

参考URLをみていただければ分かりますが。
例えば、サーバのDドライブのtempフォルダにtest.txtというログファイルを出力するのであれば。
--------------------------------------------------
OUT_FILE UTL_FILE.FILE_TYPE;

BEGIN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','A');
EXCEPTION
WHEN OTHERS THEN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','W');
END;
UTL_FILE.PUT_LINE(OUT_FILE,'(vn_CNT = ' || vn_CNT || ')');
UTL_FIL...続きを読む

Qsocket: recvはいつ,どれだけ受け取るのか?

 現在,参考書にしたがってC++でソケットプログラミングを書いています.

 sendとrecvを非同期にするために,本では select関数やWSAAsyncSelect関数などを利用していて,実際,本のとおりに書いて上手く動いています.

 ここで伺いたいのですが,recvは,どうやって「データが届いたか」を知るのでしょうか.

 同期ならば,トランシーバでの会話のように送信側が「どうぞ」といって送受信を交代させることができますが,非同期ならばそれができません.

 NICとかが,プログラムに「届いたぞ!( or これから届くぞ!)」と教えてくれるのでしょうか.あるいは逆に,プログラムがNICに「届いてる?」と聞いているのでしょうか.仮に,ここに書いたような方法で届いたことが分かったとしても,どれくらい受け取ればいいかは分かりません(それも併せて教えてもらっているのでしょうか.データを送るときには,どれだけ送ればいいか分かりますよね.受信するときはどうしてるのかを知りたいと思っています).

Aベストアンサー

Linux しか知らないので Linux で説明をします。

NIC が通信パケットを受け取ると割り込みが発生し、CPU は割り込みを受け付けて、対応するデバイスドライバを起動します。この時、ドライバはソケットバッファと呼ばれる構造体にパケットの中身をコピーして、Linux カーネルの本体に渡し、そこで TCP 等の上位プロトコル処理が行われます。

一方、ユーザプログラムの方は、 select() なり read() で待っている訳ですが、OS はもちろんプロセスが何を待っているかを知っているので、対応する待ちの条件が満たされると、この場合は select() や read() が、抜けてくる(return する)訳です。

という事で、ユーザのプログラムは select() なり read() なりで受信データを「待つ」ことが必要です。もちろん select() や read() が呼ばれた時点で既に受信しているのならば、それらは直ぐに帰ってきます。read() や recv() はデータが届いた事を知る、というよりは、届いているかチェックして、まだ届いていなければ届くまで待つ(read() が抜けてこない)という処理になります。また NIC とユーザプログラムが直接やり取りをするのではなく、間にバッファがあって、対応するソケットのデータがある(受信済み)/ないか(未受信)、という問い合わせを行っているだけです。

ソケットの場合、データの送受信は非同期であり、送受信のタイミングのずれは(ソケット)バッファである程度吸収されます。もちろん、送受信バッファが満杯になった場合は流量制御が働いて、結果的に送信側の write() や send() が待ちに入ることになります。

Linux (Unix) のソケットの受信では、read() 等で指定されたバッファが常に満杯で返されるとは限らない設計になっています。つまり、その時に受信しているデータを返すだけなので、read() で返されたバイト数を必ず見ないと間違った動きになるので注意してください。

Linux しか知らないので Linux で説明をします。

NIC が通信パケットを受け取ると割り込みが発生し、CPU は割り込みを受け付けて、対応するデバイスドライバを起動します。この時、ドライバはソケットバッファと呼ばれる構造体にパケットの中身をコピーして、Linux カーネルの本体に渡し、そこで TCP 等の上位プロトコル処理が行われます。

一方、ユーザプログラムの方は、 select() なり read() で待っている訳ですが、OS はもちろんプロセスが何を待っているかを知っているので、対応する待ちの条件が満...続きを読む

Q構造体の初期化方法について

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初期化したいと思っています。

よろしくお願い致します。

#define MAX 2000
//グローバル
struct tag{
int Npkt;
int gettime;
int rPkt;
int lossPkt;
}rdata[MAX];

main(){
  //for文で複数回実行処理
  for(i=0;i<=5;i++){
  //ここで構造体の初期化を記述する
//例として、5回プログラムを実行する
  }
}

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初...続きを読む

Aベストアンサー

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
memset( &rdata[i], 0, sizeof(struct tag) ); です。
※rdata[i]の1データだけ初期化します。

余談:
・『ZeroMemory』関数は Win32 API と分類されていますが、実体は『memset』関数に
 『#define』されているだけです。でも、戻り値を『VOID』型にキャストされているので
 『memset』関数のリターン値を取得できません。→第一引数のアドレスが『memset』関数
 ではリターンします。
・以上。おわり。

参考URL:http://taka.no32.tk/tips/Win32/ZeroMemory.html

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
m...続きを読む

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%


人気Q&Aランキング