2013-04-18 104 views
0

在C++ strings中被複制,直到接收到NULL字符,同時以字符序列進行提供。但是如果您提供要讀取的字符數,它是否會複製超過NULL字符?我有一種情況,我可能會收到一條消息,其中間有一個空字符,之後它仍然是有用的信息。同樣的問題適用於追加。CPP字符串構造函數查找並追加空字符

find()類似,如果它遇到NULL字符,它會停止搜索嗎?

+1

如果你說的'的std :: string'然後是的,他們中間可以有\ 0。 std :: string不使用「以\ 0結尾」約定。他們有存儲大小的內存。所以他們可以用作緩衝區。 – Offirmo

回答

3

您應該能夠構建含有'\0'字符的字符串:

const char a[] = "Hello\0world"; 
std::string s(a, sizeof(a)); 

std::cout << "a = \"" << a << "\"\n"; 
std::cout << "s = \"" << s << "\"\n"; 
std::cout << "sizeof(a) = " << sizeof(a) << '\n'; 
std::cout << "strlen(a) = " << std::strlen(a) << '\n'; 
std::cout << "s.length() = " << s.length() << '\n'; 

上述代碼將打印

 
a = "Hello" 
s = "Helloworld" 
sizeof(a) = 12 
strlen(a) = 5 
s.length() = 12 
+0

s的輸出是否也包含空字符或它只是刪除空字符? – csteifel

+0

@legion這是一個很好的問題,目前我還不知道答案。將不得不檢查它。 –

+0

有趣的結果! 'std :: string'不知道'\ 0'是一個字符串終止符! _Poor C-style strings_ :-D – deepmax