簡體   English   中英

C# 中的字符串結尾

[英]End of string in C#

memory中存儲的字符串是否以\0結尾? 編譯器如何知道結束?

如果是真的那么

Console.WriteLine(str.LastIndexOf('\0'));

必須返回長度,但 output = -1

MSDN

在內部,文本存儲為Char對象的順序只讀集合。 C#字符串的末尾沒有以null結尾的字符; 因此,C#字符串可以包含任意數量的嵌入式空字符('\\ 0')。

另外,來自.NET和C#中 Jon Skeet的字符串

盡管就API而言,字符串不是以null終止的,但字符數組是以null終止的,因為這意味着可以將其直接傳遞給非托管函數,而無需進行任何復制,前提是inter-op指定該字符串應該被編組為Unicode。

簡而言之,內部char數組確實以\\0結尾,但是API(例如LastIndexof )將忽略它。

另外,如果您 ac#字符串的中間手動插入\\0 (例如Hello\\0World ),則C#字符串API將忽略它,但是其他API可能不會,並且最終忽略了第一個\\0 (例如World )。

參考資料

public override int GetHashCode() {
    //...
    Contract.Assert(src[this.Length] == '\0', "src[this.Length] == '\\0'");
    //...
}

string對象包含string的長度,這就是它知道結束位置的方式。 實際上,字符串的末尾有'\\ 0'符號,表示不受托管的兼容性,但是您不能從托管代碼訪問它。

確定鏈的起點和終點

       int last = richTextBox1.Text.LastIndexOf(" ", richTextBox1.SelectionStart);
        last += 1;
        int first = richTextBox1.Text.IndexOf(" ",richTextBox1.SelectionStart);
        first -= 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM