[三流君] −−>
[プログラマー業務の愚痴] −−>
[バックナンバー一覧]
−−> No.067 Ken3、久々C言語の質問にあわてる
Ken3、久々C言語の質問にあわてる
本文(発行内容)
<Ken3、久々C言語の質問にあわてる>
サブタイトル、、 ご教授下さいより、、解説できるもんならやってみろのほうが好
目次
1.はじめの挨拶
2.ご教授下さいより、、、解説できるもんならやってみろのほうが好き
3.本題の質問にやっとこたえる
4.おわりの挨拶
----------------------------------------------------------------------------
/*
* 1.はじめの挨拶
*/
こんにちは。
三流PGのKen3です。
このメールマガジンは脚色されているので、
ご注意を、、、(実際と違う内容も含まれているので、)
今回は、なぜかKen3に来た、
CからVBへの移植の質問について、、書きたいと思います。
*ほんとは、愚痴以外は別に分けたVBAの方に書くんだけど、
今回は、こっちに載せて、反応見てからまとめてみたくて。。。
(なんか、あっちのVBA系は落ちつけなくて、、、)
*みなさんの立場で読んで、笑ってください。
疑問・感想、、指摘、、あったら、メール下さい。
/*
* 2.ご教授下さいより、、、解説できるもんならやってみろのほうが好き
*/
まだ、前置き、続きます。
私、変わり者なので(そんなん、いまさら言わなくてもわかってるって?)
ご教授下さい、よろしくお願いします
の質問より
解説できるもんならやってみろ
のほうがなんとなく好きなんだよなぁ、、、
/*
* 3.本題の質問にやっとこたえる
*/
読者から来た、質問に下記のように答えました。
*足りないところや、ごまかし、あるので、
ご指摘、アドバイスください。
どうしたんですか?まじめな質問くるなんて、、、大丈夫ですか?
って、前置きは、これくらいで、
私が今、わかる範囲での回答、書きます。
In message "移植。",
>こんちは。ken3。
>
>チョット必要に迫られて、C言語で書いたソースを解析してんだけど。
>ワカラン所教えて。(VBに移植する為)
>(全てを送るわけには、行かないんで、コードが部分的だけど (笑))
>
>1)
>
> #include このヘッダーが有れば、LSIコンパイラでも使える?
LSIコンパイラでも使える?
これは、厳しいかも?
> #include このヘッダーは、何?
getch()とか、コンソール系の関数だと思う。
SEEK_CURはstdio.hだと思うけど、
定数とかが入っている、、、
> #include 同上
なに?
> #pragma hdrstop これは、何でしょ?
えっ、、
> #define BLOCK_SIZE 32768 これの意味は?VBで言うCONST?
だと思って、いいと。
みなさんは、違うっていいそうだけど、、、
>--------------------------------------------
>2)
>
> #pragma argsused
> int main(int argc, char **argv)
> {
>*って、ポインタだよね? だけど「**」とは?
>この場合、exeにコマンドラインを渡せるって事?
>実際のexeでは、1つしか渡せないみたいだけど。
>なんで、引数が2つ?
In message "[三流PG No.020] C,VB,Access,Excel ここはどこ?私は誰?",
>/*
> * 5.C ここはどこ?私は誰?
>*/
>最後に、Cです(Ms−DOSコンソール)
>-----
>#include
>
>int main(int argc, char *argv[])
>{
>
> printf("argv[0] = %s\n", argv[0]);
>
>}
>-----
>まだ、講座でやってませんが、Main関数の引数の、
>argvの0番目に、位置が入っていると思います。
>
argcってのに、スペースで区切られたExeに渡された引数の数が入るんですよ
kutabare.exe new1.txt outdata.txt
なんてやると、
argcに2か3*忘れた、、
printf("argv[0] = %s\n", argv[0]);
printf("argv[1] = %s\n", argv[1]);
printf("argv[2] = %s\n", argv[2]);
あと、argvにパラメーターが入ります。
char **argvはかっこいい書き方で、
char *argv[]のほうがKen3流
> if(!(chk_str = findFile(argv[1]))) 上の「**argv」は、これと関係ある?なぜに[1]か?
argv[0]にEXEの起動位置が入っていて、
実際の引数は2番目[1]からなんですよたぶん。
予想、、、ファイル名をEXEの引数で渡して、なんかやってんの?
>--------------------------------------------
>3)
>
> LPSTR findFile(const char *filename) LPSTRとは?
LPSTR?なんだっけ?そんなのあった?
if(!(chk_str = findFile(argv[1])))
でやってるから、
リターンでLPSTR型を返している?
chk_strの型宣言、見てください。
> FILE *file;
> char *buff = 0 これは、ポインタ宣言と、初期化を同時実行?
> size_t rc; これは、なに?
まぁ、このへんは、あまり気にしないで、、
> prot_file = fopen(filename, "rb"); これは、バイナリでオープンだよね?
だと思う。
> buff = (char *)malloc(BLOCK_SIZE); これの意味は?
メモリを動的に取っているんですよ。
#define BLOCK_SIZE 32768
分、バッファを取っているんじゃない?
32768?16進に直すときりいいのかなぁ?
> rc = fread(buff, 1, BLOCK_SIZE, file); 引数のそれぞれの意味は、なに?
バッファへファイルから、読んでいると思えばいいと、、
1 * BLOCK_SIZE 分 file から読んで、buffにセット
> fseek(file, -32, SEEK_CUR); 同上。でも、「SEEK_CUR」の宣言は、ないんだけど(汗)。
SEEK_CURはstdio.hとか、ヘッダファイルに定義されていると思う。
で、現在位置(ファイルの)から、32バイト分戻ってるみたいですね。
-32Lだと思うけど、、まぁ、いっか。
> continue; これはなに?
これ、ループの頭に戻る命令です。
例)1〜10までだけど、5だけ後処理したくない
for(i=1 ; i <= 10; i++) {
前処理
if (i == 5) {
continue; これで、5の時は、下の処理しないでforに戻る
たしか、VBAには無くて、いろいろなとこで話題になってる?
break; は exit doなどあるから、、、わかりやすい?
}
後処理
}
> s = strchr(buff, '\"'); これの意味は?
VBAのinstrと同じじゃないかなぁ?
”の位置を探して、何かしているとか?
>--------------------------------------------
>4)
>
> va = strtol(sa, 0, 16); この関数は、なに?
strtol?知らないなぁ、、
予想ですが、文字列をLong型にしているとか、、、
でも、それなら、atolがあるしなぁ、、
strtolって、関数、自作されてないか(標準関数以外?)みてください。
また、Vaの型宣言や、使われているところから、判断?
saの変数は?0,16って?
16進の文字列を直しているとか?
> CharToOem(str, s); もしかして、Winの関数?
これも、、、わからない、、、
またまた、予想?
文字列の連結とか置き換えとか、、自作関数では?
>ちゅう訳で、たのんます。
まぁ、こんな感じで、、、簡単な回答です。。。
/*
* 4.終りの挨拶
*/
なんか、こっちの愚痴マガに書くほうが、
落ち着くなぁ、、、
もう一つのVBA系のほうは、なんかノリが悪くって、、、
*2つ(両方)読んでる人、、、重なってすみません。。。
continueの話とか、
ネタもらったし、まじめにVBA系も書くかなぁ、、、
三流PG Ken3でした。
フィードバック
愚痴系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告