ご存じだろうか?
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# の開発者たちとの攻防がくっきりと見えるところか。