////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2003/05/26(Mon) No.208
    配信数： 3170 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年５月２４日（土）の更新                */
http://www.kab-studio.com/

・ほとはー１話追加！
　三人合体ホットハーブに１話追加。第４話最終回！

[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


////////////////////////////////////////////////////////////////////
/*                ２００３年５月２６日（月）の更新                */
http://www.kab-studio.com/

・更新なし
　この日は沖縄旅行に行ってるので、ほとはーの更新は繰り上げて土曜にな
ります。
　たぶん日記の更新はありません。
　KAB-studio.h は予定通り発行されますが、日記ダイジェスト等は金曜ま
での分になります。御了承ください。


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/05/18 (Sun)
　マシンを一度分解。メールサーバー立てる。ちょっと苦労。あとは 
Tomcat だけ。プリンター帰還。ほとはー各話タイトル。そして GUID 命名
規則。そして埋まってるパプリカ。そして独学。

2003/05/19 (Mon)
　デジカメ購入。 EXLIM ZOOM 。倒れそうな秋葉様。 Cookie 配列から 
Bean にコピー。午後に健康診断。傘とかも購入。 Nimda アタック。日記
ツッコミサーブレット化。クッキー使いたいんだけどいい？

2003/05/20 (Tue)
　Jakarta を片っ端からテスト。 Integer.parseInt( "１" ) が通る。
Web-inf ってなってたら動かない。ツッコミの全然来てない……。すてプリ
がかなりいい感じ。そして親と派生のポインタ。そして VB のステートメン
ト。

2003/05/21 (Wed)
　次のお仕事の噂。頭が Java モード。 Ever17 ドラマＣＤとか購入。
ほとはー夏コミ版にトーンを貼ってみる。まだ慣れてない……。ロボットと
夢。そして親と派生のポインタ２。そしてロジック。

2003/05/22 (Thu)
　VB のテスト。 <html:errors /> の危険性。サニタイジングが必要。技術
指向。ゼミチョウ２０００様＆企画係２０００様と日記オフ会というより
同窓会。そしてポインタ３。

2003/05/23 (Fri)
　VB のを修正。月曜リリースらしいけど大丈夫か……。 Collections が 
STL っぽい。帰りにアンソロとか。排水溝から葉っぱ。そしてハオシャオの
泣き顔。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第七章　告白　−９−

　歪んだ形で生え伸びる木々。
　鬱蒼と茂る草。
　岩がごろついている起伏の激しい道。
　沼かと思えるほどぬかるんだ地面。
　月さえも見えない、ジャングルのような森の中を、ふたりは駆けていく。
　別に、誰かに追われているわけではない。ただ、これがふたりのペースだ
った。雅樹は右手の白い光で地面を照らし、舞は水蒸気の雰囲気を感じ取っ
ていた。そしてそれだけで十分だった。
　が。
「っと」
　雅樹が止まる。舞が肩で息をしていた。
「ごめん」
「じゃ、ここで休憩だな」
　無人駅を出てからかれこれ５時間。電車では寝て、夜中に走る。その予定
では朝方には着くという話だったが。
「これ、じゃ、はぁ、遅れちゃうね」
「別に遅れたってかまやしねぇさ。食事並べて待ってるわけでもなし」
「はは、そうだね」
　舞は苦しそうに笑って、岩に座った。
　呼吸が落ち着いてきた頃。
「あ、別に遅れるの気にしてないから。それに……」
　舞は、目を伏せた。
「あんたの体力、ちょっと普通じゃない」
「ああ」
「不死と関係あるの？」
「……」
　舞は空を見上げた。生い茂る葉々が、星を隠している。それでも、ずっと
見続ければ、いくつかは見えるような気がしていた。だから、ずっと見上げ
ている。
「電車で……寝てなかったでしょ」
「疲れないわけじゃないんだ」
　雅樹も岩に腰を下ろす。
「疲れを感じたり、痛みを感じたり、眠気を感じたり……そういう、意識が
もうろうとする、そういうことがない体になってるんだ」
「それが、朱き泉の能力？」
「……」
　話したくない、そう言っている。
　だが、こうも付け足した。
「朱き泉に行けば、誰かが話してくれるさ」
　雅樹も、舞と同じように、見えない夜空を見上げていた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『……なんで次の表紙壁紙がないの〜！？』
「なんかそうみたいだね」
『そうみたいだね、じゃないわよ！！　移転先はバカがいるし……』
「う、それはちょっと……」
『で、理由は？』
「６月の始めに夏コミの当落がわかるんだけど」
『うん』
「表紙でそのお知らせをするみたい」
『あ、そういうことなんだ。……夏コミってまだ先だよね』
「うん」
『もしかして、夏コミまで表紙壁紙なし……？』
「……」
『……ウキーッ！！』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 11.08
文字列クラスふたたび

『ふたたび？』
「そう。前回は Version 5.22 ( No.087 ) で」
『そういえばそのときも配列とか CString とか使ったね』
「そのときも言ったけど、文字列を配列じゃなくクラスで操作すると、いろ
んなメリットがあります」

・可変長だからサイズを気にしなくていい。
・便利な関数を使うことができる。
・演算子で操作できる。

「対してデメリットは次のようなものがあります」

・文字列を受け取るのが苦手。
・使えない環境もある。
・演算子を使うと間違った操作をすることがある。
・仕組みを知らないで使うと危険。

『デメリットの方が多いじゃん！』
「そうなんだけど」

・可変長だからサイズを気にしなくていい。

「のメリットが計り知れないんです」
『なんで？』
「それはあとのお楽しみ」
『全然楽しみじゃないし……』
「とりあえず、今回は文字列クラスについて慣れておきます。復習も兼ねて
ね」
『はーい』
「まずは普通に使ってみます」

void UseCString()
{
    CString cStr;
    cStr = "あいうえお";
    TRACE( "%s\n", cStr );
    // あいうえお
}

「今回、文字列クラスは CString を使います」
『他にもあるの？』
「うん、 std::string っていうのもあるんだけど、そっちはちょっと上級
者向けだから。で」

    CString cStr;

「で、 CString の変数 cStr を作ります。この中に文字列を入れられま
す」
『入れてるのが』

    cStr = "あいうえお";

『ってわけね。 = で入れられるのは便利よねー』
「それに」

    TRACE( "%s\n", cStr );

「というふうに、文字列として使えるところはすべてそのまま使えます」
『便利よね』
「で、これと同じ事を char の配列で試してみます」
『便利じゃない例ってわけね』

void UseCharAry()
{
    char pch[256];
    strcpy( pch, "あいうえお" );
    TRACE( "%s\n", pch );
    // あいうえお
}

「まず、 char の配列を作ります」

    char pch[256];

「当然、この配列には 256 文字以上は入りません」
『でも CString はそういうの関係なく入ります、と』
「そういうこと。それが CString のアドバンテージのひとつ。次に」

    strcpy( pch, "あいうえお" );

「と、文字列を入れる時にはランタイムを使わなくちゃいけません」
『 CString なら = で簡単にできる、と』
「まぁ最後の TRACE() で出力は同じようにできるってことで」
『たったこれだけで見ると CString の方がむっちゃ便利よねー』
「じゃあ苦手な方もしておこうか。まず、普通に文字列を受け取ることがで
きません」

void UseCStringForRecieveBad()
{
    CString cStr;
    strcpy( cStr, "あいうえお" );
    TRACE( "%s\n", cStr );
}

『あ、エラーだ』

error C2664: 'strcpy' : 
　1 番目の引数を 'class CString' から 'char *' に変換できません。
　この変換を実行可能なユーザー定義変換演算子がないか、
　または演算子を呼び出せません。

「なんでこうなるかっていうと、 strcpy() の型がこうなってるから」

 char *strcpy( char *string1, const char *string2 );

「１番目の引数は char * 、２番目の引数は const char * 。で、 CString 
には const char * が来た時に自動的に中の文字列を渡す機能はあるんだけ
ど、 char * に対する機能はないんです」
『なんで？』
「だって」

    CString cStr;

「この時点で、中に入ってる文字列は空。配列で言えば、この中に入ってる
配列は」

    char pch[0];

『げ、これじゃ文字列受け取れないね』
「そういうこと。受け取るためには」

    char pch[256];

「って感じに領域を確保しなきゃいけないんです。そのためのメンバ関数が
CString::GetBuffer() と CString::ReleaseBuffer() です。というわけで
これを使って文字列を受け取ってみます」

void UseCStringForRecieve()
{
    CString cStr;
    strcpy( cStr.GetBuffer( 256 ), "あいうえお" );
    cStr.ReleaseBuffer();
    TRACE( "%s\n", cStr );
    // あいうえお
}

『お、ちょっと長いけど受け取れてる』
「 CString::GetBuffer() は、引数で渡されたサイズ分、文字列を置く領域
を確保します」
『つまり』

    char pch[256];

『ってするってことね』
「そういうこと。で、この戻り値の型は char * だから、これをそのまま渡
す事ができます」
『で、受け取れるわけね。そのあとの CString::ReleaseBuffer() ってなに
やってんの？』
「これは後始末。たとえば文字列のサイズの取り直しとか」
『文字列のサイズ？』
「 CString の中に持っている〈文字列サイズ〉を取得し直してるんです。
中に入ってる文字列が変わったわけだから、そういう情報も取り直さないと
いけないから」
『なるほどねー』
「で、これをもう一度見て欲しいんだけど」

    strcpy( cStr.GetBuffer( 256 ), "あいうえお" );

『文字列を受け取るために、中身を広げてるとこだね』
「でも、これって無駄なんです。サイズはわかってるんだから」

void UseCStringForRecieveOptimizeSize()
{
    CString cStr;
    strcpy
        ( cStr.GetBuffer( strlen( "あいうえお" ) + 1 )
        , "あいうえお" 
        );
    cStr.ReleaseBuffer();
    TRACE( "%s\n", cStr );
    // あいうえお
}

『 strlen() で文字列のサイズを取得……して、それ使って中身広げれば絶
対に受け取れるサイズになるってわけね。あれ？　でもさ、同じ事を配列で
もすればいいんじゃないの？』
「ところが、これは配列では使えないんです」

void UseCharAryBad()
{
    char pch[ strlen( "あいうえお" ) ];
    strcpy( pch, "あいうえお" );
    TRACE( "%s\n", pch );
}

『あ、エラーだ』

error C2057: 定数式が必要です。

「配列のサイズは、コンパイルするときに判っていないといけないんです。
だから、プログラムの途中でサイズを変えたくても変えられないんです」
『でも CString はできてたよね』
「そう、もちろんその方法はあって、でもそれが面倒なんです。というわけ
で次回に続く！」

/*
    Preview Next Story!
*/
『 CString ってやっぱり便利ねー』
「でもそのためには仕組みを知らなくちゃ」
『知らなくちゃいけないの？』
「下手な使い方するとまずいことになるから」
『プログラミングってそういうの多いよね』
「でも、多い割には知られてない事も結構……」
『げ』
「というわけで次回」
＜ Version 11.09 メモリを動的に確保する ＞
『につづく！』
「というわけでやっぱり仕組みを勉強してもらいます」
『やっぱり面倒そう……』


////////////////////////////////////////////////////////////////////
/*                ２００３年６月２日（月）の更新                  */
http://www.kab-studio.com/

・ほとはー１話追加予定
　三人合体ホットハーブに１話追加予定です。表紙壁紙はちょっと理由があ
って少し先延ばし〜。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

