C 裡能夠使用的字串除了以空字元結尾的那種還有什麼?

時間 2021-06-01 07:59:56

1樓:影心

reference operator( size_type pos );

(1)const_reference operator( size_type pos ) const;

(2)返回到位於指定位置 pos 的字元的引用。不進行邊界檢查。若 pos > size() ,則行為未定義。

1) 若 pos == size() ,則行為未定義。

2) 若 pos == size() ,則返回到擁有值 CharT() 的字元(空字元)的引用。

(C++11 前)

若 pos == size() ,則返回到擁有值 CharT() 的字元(空字元)的引用。

對於第一(非 const 版本),若修改此字元為任何異於 CharT() 的值,則行為未定義。(C+

2樓:Glavo

QString Class | Qt Core 5.14.0

icu::UnicodeString Class Reference

3樓:wang

C++ 的 string literal 語法 只有 "Hello" 這種雙引號形式,雙引號之前可選一些 u8 u U L R 字首,這些全都是帶空終止符的,本質上是個建立常量字元陣列的語法糖。如果你明確不需要空終止符,那就沒有什麼語法糖可用了,只能這麼建立字串

剩下的就都是二等公民,不管是標準 std::basic_string 還是別的非標準字串類,記憶體需不需要連續,需不需要有空終止符,其實只是看設計上考沒考慮到對一些舊式 C 風格系統呼叫的相容,和一些效能方面的考慮。

Rust 的 string literal 就是沒有空終止符的 utf-8 編碼位元組陣列,本質上跟 C++ 的 std::u8string_view 是一樣的玩意。甩掉了相容的包袱,這是很正確的設計。

然而在呼叫一些 Windows API 時要轉換成 utf-16le 再加乙個空終止符,這是有額外效能開銷的,但也不痛不癢。

4樓:XZiar

反對一下輪子哥好了。

std::basic_string_view - cppreference.com

string_view可以不以0結尾。

當然如果你不限定STL的話,其實string還能有很多種,你用deque寫乙個不連續儲存的也行。

不過按你的提問方式,只有兩種——以特定字元(null)結尾和不以特定字元結尾……

5樓:

std::string

推薦去 zh.cppreference.com 遊玩一圈,最開始可以從容器庫和智慧型指標庫開始學習。

C字串以 0 結尾的問題?

Milo Yip printf 7s 7s 6s 6s n hd.a,hd.b,hd.c,hd.d 張舸 那就不要用標準庫函式了嘛,既然你知道每個字串應有的長度,自己去實現 copy 不就好了?不要想什麼 strcpy。另外你的 read 做法也不對,因為不能保證這個 struct 在記憶體中是連續...

為什麼 C 語言對字串的設計是用零結尾,而不是像 Pascal 一樣在字串首指明長度?

狂奔的野豬 其實PASCAL中的字元陣列的元素數目也是比你說明的多乙個的。假如a string 5 那麼a 0 是存在的,你可以是試試輸出看看是什麼! 穩定可靠的東西,就是簡單直觀的東西。這是最簡單的字串的模型了。字串自身不額外維護長度這個屬性。如果像其他語言一樣,在前面加上乙個字串長度,則需要維護...

C語言中的字串是如何儲存漢字的?

這東西應該和具體的環境有關。在VisualStudio預設情況下,是GBK編碼,兩個位元組存乙個漢字,因此如果引用不慎會造成亂碼。include intmain 輸出 c4 e3 ba c3 編碼 你 c4e3 好 bac3 printf s s 輸出 你好 注 程式正常操作 printf s s ...