You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何在无空终止符的情况下确定字符串的结尾与长度?

C#如何在无空终止符的情况下确定字符串的结尾与长度?

嗨,这个问题太戳中从C/C++转C#的新手痛点了——我当初刚摸C#的时候,也对着字符串里的\0犯嘀咕:这玩意儿怎么不按C那套截断字符串啊?

其实核心逻辑很简单:C#里的string对应.NET的System.String类型,它可不是单纯的字符数组,而是一个自带元数据的引用类型。

它的内部结构里直接存着一个整数类型的长度字段——就像给字符串自带了个“身份卡”,明明白白告诉CLR这个字符串有多少个字符。所以当你调用sample.Length的时候,根本不用像C/C++那样遍历字符找\0,直接读这个预存的长度值就行,效率还更高。

再看你给出的例子:

string sample = "Hello\0World";
Console.WriteLine(sample); // Output: Hello\0World
Console.WriteLine(sample.Length); // Output: 11

这里的\0在C#里就是个普通的Unicode控制字符(U+0000),和'a'、'b'没本质区别——字符串会把它正常存入字符序列,算长度的时候也会把它算进去(5个Hello字符 + 1个\0 + 5个World字符,正好11)。Console.WriteLine输出时,也会严格按照内部记录的长度遍历所有字符,自然不会在\0的地方截断。

顺带提一句:如果要和非托管的C/C++代码交互,把C风格的空终止字符串转成C#字符串时,CLR也支持通过指定长度的方式,把包含\0的完整内容转过来,完全不受空终止符的限制。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:10:10