我有一個基地wchar_t*
,我期待追加另一個到底。我該怎麼做?我不能使用已棄用的函數,因爲我將警告視爲錯誤。如何將兩個wchar_t *連接在一起?
回答
#include <wchar.h>
wchar_t *wcsncat(wchar_t *ws1, const wchar_t *ws2, size_t n);
的wcsncat()
功能追加不超過字符串的前n個字符更指向ws2
到字符串的末尾由ws1
指向。如果在n
字符之前NULL
字符出現在ws2
之前,則直到NULL
字符的所有字符都會附加到ws1
。 ws2
的第一個字符將覆蓋ws1
的終止NULL
字符。終止字符始終附加到結果中,如果用於複製的對象重疊,則行爲未定義。
ws1
是空終止目標字符串。
ws2
是空終止的源字符串。
n
是字符追加數。
已聲明已棄用。 – Chad 2009-12-06 17:49:49
如上所述,最便攜的方法是使用wcsncat
,但聽起來像您致力於Visual C++ 2005及更高版本的「安全CRT」功能。 (只有Microsoft已經「棄用」這些功能。)如果是這種情況,請使用在string.h中聲明的wcsncat_s
。
爲什麼不首先使用std::wstring
:
wchar_t *ws1 = foo(), *ws2 = bar();
std::wstring s(ws1);
s += std::wstring(ws2);
std::wcout << s << std::endl;
如果需要的話,std::wstring::c_str()
給你訪問結果作爲const wchar_t*
。
或'const wchar_t * concatenation = s.c_str();'取決於 - 但是我會做的第一件事就是將它們包裝成字符串類型。 – 2009-12-06 18:08:34
+1,人們應該在適當的時候使用STL。 – DaMacc 2009-12-06 18:12:58
使用wstrncat/wcsncat
函數很好,但我認爲這些安全字符串函數的最佳版本是由Open BSD創建的'l'函數,即strlcat
和wstrlcat
。使用'n'版本,您最終可能會得到一個沒有空終止符的字符串,因此您仍然可能遇到安全問題。另外某些實現會將緩衝區中未使用的空間置零,這可能會使事情減慢一點。
維基百科頁面上有這些功能的更多信息:Strlcpy et al.。唯一的問題是這些不在標準庫中,所以你必須自己將代碼包含在你的項目中。
這裏的源到wstrlcat
功能:
/* * Appends src to string dst of size siz (unlike strncat, siz is the * full size of dst, not space left). At most siz-1 characters * will be copied. Always NUL terminates (unless siz = siz, truncation occurred. */ size_t wstrlcat(wchar_t *dst, const wchar_t *src, size_t siz) { wchar_t *d = dst; const wchar_t *s = src; size_t n = siz; size_t dlen; /* Find the end of dst and adjust bytes left but don't go past end */ while(n-- != 0 && *d != L'\0') { d++; } dlen = d - dst; n = siz - dlen; if (n == 0) { return(dlen + wcslen(s)); } while(*s != L'\0') { if(n != 1) { *d++ = *s; n--; } s++; } *d = '\0'; return(dlen + (s - src)); /* count does not include NUL */ }
- 1. 將兩個列表連接在一起
- 2. 將兩個類連接在一起
- 3. 如何在Java中將兩個JFrames Windows連接在一起
- 4. 如何在C#中將兩個表單連接在一起?
- 5. 如何在SQL中將兩個表連接在一起?
- 6. 如何將兩個實體對象連接在一起?
- 7. 如何將兩個碼頭集裝箱連接在一起?
- 8. 如何將兩個AFP文件連接在一起
- 9. 如何將兩個離子應用程序連接在一起?
- 10. 如何修復將兩個表連接在一起的錯誤
- 11. 如何將這兩個html表連接在一起?
- 12. 如何將兩個計數查詢連接在一起?
- 13. 我可以將兩個連接資源連接在一起嗎?
- 14. 使用兩個外鍵將兩個表連接在一起
- 15. Julia:如何將一個矩陣的兩個字符串列連接在一起
- 16. 連接兩個UIScrollView的在一起
- 17. 如何將這些連接在一起?
- 18. 如何將兩個wav文件連接成一個接一個
- 19. 如何將兩個連接在LINQ
- 20. 如何在vim中一起連接兩個命令?
- 21. 如何讓兩個+行連接在一起? Excel 2010(示例)
- 22. 如何連接兩個相同的表一起在MySQL
- 23. 如何將兩個正在運行的碼頭集裝箱連接在一起?
- 24. 如何將兩個表連接在一起,並將兩個表都組合成一列?
- 25. R ggplot2:將線圖的兩個部分連接在一起
- 26. 無法將兩個ViewController連接在一起
- 27. iPhone/iPad SDK - 將兩個或更多視頻連接在一起
- 28. 將兩個mbtiles文件連接在一起
- 29. 將兩個形狀連接在一起,Silverlight 2
- 30. Java將兩個字符串連接在一起charAt
如果你的意思爲「過時」,微軟不喜歡的標準功能,然後不要打擾。你真的想要鎖定供應商,但仍然沒有絕對的安全性嗎?只需在項目文件中定義'_CRT_SECURE_NO_WARNINGS',VC++就會閉嘴。 – MSalters 2009-12-07 11:18:43