瞭解 C 字串特徵

#include <iostream>
#include <string>

int main()
{
    const char * C_String = "This is a line of text w";
    const char * C_Problem_String = "This is a line of text ኚ";
    std::string Std_String("This is a second line of text w");
    std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");

    std::cout << "String Length: " << Std_String.length() << '\n';
    std::cout << "String Length: " << Std_Problem_String.length() << '\n';

    std::cout << "CString Length: " << strlen(C_String) << '\n';
    std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
    return 0;
}

根據平臺(Windows,OSX 等)和編譯器(GCC,MSVC 等),此程式可能無法編譯,顯示不同的值或顯示相同的值

Microsoft MSVC 編譯器下的示例輸出:

字串長度:31
字串長度:31
CString 長度:24
CString 長度:24

這表明在 MSVC 下使用的每個擴充套件字元都被認為是單個字元,並且該平臺完全支援國際化語言。
但是應該注意,這種行為是不尋常的,這些國際字元在內部儲存為 Unicode,因此實際上是幾個位元組長。這可能會導致意外錯誤

在 GNC / GCC 編譯器下,程式輸出為:

字串長度:31
字串長度:36
CString 長度:24
CString 長度:26

此示例演示雖然在此(Linux)平臺上使用的 GCC 編譯器確實支援這些擴充套件字元,但它也使用( 正確) 幾個位元組來儲存單個字元。
在這種情況下,可以使用 Unicode 字元,但程式設計師必須非常小心地記住在這種情況下字串長度是以位元組為單位的長度,而不是可讀字元長度

這些差異是由於如何在每個平臺上處理國際語言 - 更重要的是,本示例中使用的 C 和 C++字串可以被視為位元組陣列,因此(對於此用法) C++語言考慮字元(char)是單個位元組