2014-06-09 73 views
0

標題非常多。如果具有UTF-8字符的標準C++字符串沒有零字節,則掃描會在由其大小定義的字符串末尾終止?相反,如果字符串有一個零字節,掃描在該字節處停止,還是繼續到字符串的全長? 我看過Re2.h文件,它似乎沒有解決這個問題。Re2是否使用字符串大小或空終止?

+0

C++字符串不使用空終止字節,c樣式字符串。請參閱:http://stackoverflow.com/questions/11752705/does-string-contain-null-terminator – EdChum

+0

請顯示一些示例源代碼,以解決您的問題 – vz0

+1

@EdChum:C++ 11字符串* *需要包含\ 0。 http://en.cppreference.com/w/cpp/string/basic_string/data或標準本身也這樣說 – deviantfan

回答

0

含有UTF-8字符不容具有std::string 0字節的文本
(只終止)的一部分,因爲UTF-8 doesn't允許0's任何地方。

而且使用給定you're一些C++ 11兼容,一個終止符0是保證
(如果你使用data()c_str() doesn't無所謂。而且數據是原始數據,所以...)。
請參閱http://en.cppreference.com/w/cpp/string/basic_string/data
或標準(21.4.7.1/1等)。
=>的字符串的處理將在0

+1

根據Unicode標準,您的第一句話是錯誤的。 Unicode將代碼點0x0000定義爲控件NULL,並且UTF-8編碼格式指定如何在UTF-8中格式化(作爲單個字節0x00)。 –

+0

當然,'std :: string'或''上的函數不會停止在0. –

+0

正如我在其他評論中所說的,我不明白這個問題。如果你故意將字符串放入字符串中,這將是一個問題。但爲什麼要這樣做...... – deviantfan

0

到RE2的界面似乎使用std::string,幾乎 當然意味着它使用開始和 字符串的末尾,和空字符是停止像任何其他字符。 (這些都是用Unicode和UTF-8定義的。)當然,'\ 0'在類別控制字符中,所以它不會與 匹配類似「\ pL」(它匹配信)。但它 應匹配「\ pC」。當然,還有'\u0000'和其他空字符的表示形式。