Из того, что я понимаю, внутренний символьный буфер в строках .NET CLR заканчивается нулем, хотя, естественно, этот нулевой символ не попадает в число символов, поэтому любой код .NET будет его игнорировать.Единственная причина, по которой null - это простое взаимодействие с Windows API или другим простым C-кодом, который ожидает, что строки заканчиваются нулем.Вместо добавления нулевого символа в любое время, когда строка .NET должна быть передана в C API (и, возможно, с необходимостью перераспределения и копирования всей строки), нулевой символ просто с самого начала - полезная оптимизация в реальном-world, поскольку .NET по-прежнему приходится много взаимодействовать за кулисами, даже если вы не используете его явно.
Если у вас действительно есть несколько нулевых символов в середине вашей строки, ну, любой C API, который получает вашу строку, вероятно, остановится на этом и никогда не достигнет конца строки.Я думаю, вы даже можете попробовать это в C ++ / CLI самостоятельно и посмотреть, что произойдет.:)