[英]End of string in C#
memory中存儲的字符串是否以\0
結尾? 編譯器如何知道結束?
如果是真的那么
Console.WriteLine(str.LastIndexOf('\0'));
必須返回長度,但 output = -1
從MSDN
在內部,文本存儲為Char對象的順序只讀集合。 C#字符串的末尾沒有以null結尾的字符; 因此,C#字符串可以包含任意數量的嵌入式空字符('\\ 0')。
盡管就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.