2011年12月16日金曜日

いまさらな C# string クラス

ご存じだろうか?
C# の string (String のエイリアスなので同じもの) 型の変数に関するあれこれ。


実は、文字列の終端はヌル文字ではないんです!


「何と!」


ということは、文字列の途中にヌル文字が座ってたりします。


なので以下のような C ちっくなコードはデンジャラスです。


string str = "あれやこれや";

int lp = 0;
while (true)
{
    if (str[lp] == '\0') break;


    // ...なんやかんや


    lp++;
}


まぁこれはちょっと無理矢理すぎた感があるが...
普通はクラスプロパティの Length を見るだろうから、こういう問題には当たることは無いだろう。


ただし、C からの移行組で、ポインタ変数をバリバリ使ってた輩は注意が必要。


「おぅおぅ! C# にはポインタはないのかえ?」


なんてほざいて、色々調べたら出来ることが分かって、わざわざ使ってます。
みたいな?
そういう人たちは気をつけないとダメです。
というか、C# で以下のような事する意味あんのか?


unsafe private void test()
{
    char[] str = "いろはにほへと".ToCharArray();


    fixed (char* pnt = &str[0])
    {
        char* ptr = pnt;
        while (*ptr != '\0')
        {
            // なんやかんや
            ptr++;
        }
    }
}


怖いくらいまんま C になってる...おそろしや...


まぁポインタ使うには上記のように、unsafe やら fixed やらを使って
「今からあっしはポインタを使いまっせー!」
と内外に宣言しないといけないようだし、殆どの人たちは
「めんどくさっ!」
と、今後一切使わなくなるでしょう。


ただ、どの世界にも異端児(変態)はいるもので、そういう人たちのためにあるようだ。


しかし面白いのは、その変態たちと C# の開発者たちとの攻防がくっきりと見えるところか。





0 件のコメント:

コメントを投稿