wchar_t*
tabanım var ve sonuna başka bir tane eklemek istiyorum. Nasıl yaparım? Uyarıları hata olarak kabul ettiğim için kullanımdan kaldırılmış işlevleri kullanamıyorum.İki wchar_t * öğesini nasıl birleştiriyorsunuz?
cevap
#include <wchar.h>
wchar_t *wcsncat(wchar_t *ws1, const wchar_t *ws2, size_t n);
wcsncat()
fonksiyon ws1
tarafından işaret dizisinin sonuna ws2
tarafından işaret dizgenin ilk n karakterden fazla ekler. NULL
karakteri, n
karakterlerinden önce ws2
karakterleri içeriyorsa, NULL
karakterine kadar olan tüm karakterler ws1
'a eklenir. ws2
'un ilk karakteri, ws1
'un sonlandırıcısı NULL
karakterinin üzerine yazılır. Bir NULL
sonlandırma karakteri her zaman sonuca eklenir ve kopyalama için kullanılan nesneler çakışıyorsa, davranış tanımsızdır.
ws1
ws2
n
eklemek karakter sayısı mı.
Kullanımdan kaldırılmış ilan edildi. – Chad
Bunu yapmanın en taşınabilir yolu, yukarıda belirtildiği gibi wcsncat
'dur, ancak Visual C++ 2005 ve sonraki sürümlerinde "güvenli CRT" özelliklerine bağlı olduğunuza benziyor. (Sadece Microsoft bu işlevleri kullanımdan kaldırmıştır.) Durum buysa, string.h dosyasında bildirilen wcsncat_s
kullanın.
Neden ilk etapta bir std::wstring
kullanmayın: Gerekirse, std::wstring::c_str()
bir const wchar_t*
olarak sonuç erişim sağlar
wchar_t *ws1 = foo(), *ws2 = bar();
std::wstring s(ws1);
s += std::wstring(ws2);
std::wcout << s << std::endl;
.
veya 'const wchar_t * concatenation = s.c_str();' bağımlı - ama evet yapacağım ilk şey onları bir dize türünde sarmalamak. –
+1, insanlar uygun yerlerde STL kullanmalıdır. – DaMacc
wstrncat/wcsncat
işlevlerini kullanmak iyidir, ancak bu güvenli dize işlevlerinin en iyi sürümünün Open BSD, yani strlcat
ve wstrlcat
tarafından oluşturulan "l" olduğunu düşünüyorum. 'N' sürümleriyle, null bir sonlandırıcıya sahip olmayan bir dizeyle bitirebilirsiniz, böylece hala güvenlik sorunlarınız olabilir. Ayrıca bazı uygulamalar, tampondaki kullanılmayan alanı sıfırlar ve bu da işleri yavaşlatır.
wikipedia sayfası, bu işlevler hakkında daha fazla bilgiye sahiptir: Strlcpy et al.. Tek sorun, bunlar standart kütüphanelerde bulunmamasıdır, bu nedenle kodu projenize kendiniz eklemeniz gerekir.
/* * 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. Java'da iki giriş akışını nasıl birleştiriyorsunuz?
- 2. 'wchar_t *' öğesini 'const char *' konumuna dönüştürme
- 3. GIT'i Windows'ta nasıl birleştiriyorsunuz?
- 4. wchar_t * dizesinin dizgeye dönüştürülmesi
- 5. Farklı yerel repos/klasörlerde bulunan iki git dalını nasıl birleştiriyorsunuz?
- 6. wchar_t değerlerini konsola nasıl yazdırabilirim?
- 7. İki liste öğesini LINQ
- 8. Wchar_t Yerine getirme
- 9. unsigned long to wchar_t
- 10. Ölçek ve Çeviri Animasyonunu Nasıl Birleştiriyorsunuz
- 11. Bir matrisin satırlarını bir vektörde nasıl birleştiriyorsunuz?
- 12. İki Arraylist öğesini String'e dönüştürme [] []
- 13. Bir NSArrayController öğesini iki nib dosyası arasında nasıl paylaşırım?
- 14. Bir char dizesini bir wchar_t dizesine nasıl dönüştürebilirim?
- 15. jQuery: Son iki öğe öğesini mi almak istiyorsunuz?
- 16. MemberwiseClone() öğesini nasıl arayabilirim?
- 17. "prepareForReuse" öğesini nasıl uygularım?
- 18. GWT'de iki JavaScriptObject öğesini karşılaştırmanın en iyi yolu nedir?
- 19. Poco :: Yol const wchar_t * ile derler ama beklenmedik şekilde davranır
- 20. iostreams - "wchar_t" veya "charXX_t" değerini karakter olarak yazdırma
- 21. Start_date öğesini ve ilgili end_date öğesini nasıl seçerim
- 22. Fragment initLoader öğesini çağırdığınızda?
- 23. Bir açılan kutu öğesini yerinde nasıl yeniliyorsunuz?
- 24. iPhone'da NSAttributedString öğesini nasıl görüntülerim?
- 25. Scope_Identity() öğesini Int'a nasıl uygularım?
- 26. magrittr :: inset() öğesini nasıl kullanırım?
- 27. NSAttributedString'in _outside_ öğesini nasıl çalıştırıyorsunuz?
- 28. current_user öğesini middleware'de nasıl ayarlayabilirim?
- 29. Enumerable.Join öğesini F # den nasıl ararım?
- 30. NSMutableAttributedString öğesini NSString'e dönüştür
siz "deprecated" ile demek, Microsoft sevmez standart fonksiyonlar, daha sonra rahatsız etmeyin:
İşte
wstrlcat
işlevine kaynağıdır. Satıcının gerçekten kilitlenmesini istiyor musun, ama hala mutlak bir güvenlik yok mu? Sadece proje dosyasında '_CRT_SECURE_NO_WARNINGS' öğesini tanımlayın ve VC++ kapanacaktır. – MSalters