Ich habe eine Basis wchar_t*
und ich suche nach einem anderen auf das Ende. Wie mache ich es? Ich kann keine veralteten Funktionen verwenden, da ich Warnungen als Fehler behandle.Wie verkettet man zwei wchar_t * zusammen?
Antwort
#include <wchar.h>
wchar_t *wcsncat(wchar_t *ws1, const wchar_t *ws2, size_t n);
Die wcsncat()
Funktion anhängt nicht mehr als die ersten n Zeichen des Strings von spitz ws2
bis zum Ende des String ist, auf von ws1
. Wenn ein NULL
Zeichen in ws2
vor n
Zeichen angezeigt wird, werden alle Zeichen bis NULL
an ws1
angehängt. Das erste Zeichen von ws2
überschreibt das abschließende Zeichen NULL
von ws1
. Ein Abschlusszeichen wird immer an das Ergebnis angehängt, und wenn sich die zum Kopieren verwendeten Objekte überschneiden, ist das Verhalten nicht definiert.
ws1
Ist das nullterminierten Zielstring.
ws2
Ist nullterminierte Quellzeichenfolge.
n
Ist die Anzahl der Zeichen anzuhängen.
Es wurde als veraltet deklariert. – Chad
Der portabelste Weg, dies zu tun ist wcsncat
wie oben erwähnt, aber es klingt wie Sie sind verpflichtet, die "sicheren CRT" -Funktionen von Visual C++ 2005 und später. (Nur Microsoft hat diese Funktionen "veraltet".) Wenn das der Fall ist, verwenden Sie wcsncat_s
, deklariert in string.h.
Warum nicht ein std::wstring
in erster Linie verwenden:
wchar_t *ws1 = foo(), *ws2 = bar();
std::wstring s(ws1);
s += std::wstring(ws2);
std::wcout << s << std::endl;
Bei Bedarf std::wstring::c_str()
Sie das Ergebnis als const wchar_t*
Zugang gibt.
oder 'const wchar_t * Verkettung = s.c_str();' abhängig - aber das erste, was ich tun würde, ist sie in einen String-Typ zu wickeln. –
+1, Menschen sollten die STL wo angemessen verwenden. – DaMacc
die wstrncat/wcsncat
Funktionen zu verwenden ist gut, aber ich denke, die beste Version dieser sicheren String-Funktionen die ‚l‘ diejenigen von Open BSD, das heißt strlcat
und wstrlcat
erstellt sind. Mit den 'n' Versionen können Sie mit einer Zeichenfolge enden, die keinen Nullabschluss hat, so dass Sie immer noch Sicherheitsprobleme haben können. Auch bestimmte Implementierungen werden den unbenutzten Platz im Puffer auf Null setzen, was die Dinge etwas verlangsamen kann.
Die Wikipedia-Seite enthält weitere Informationen zu diesen Funktionen: Strlcpy et al.. Das einzige Problem ist, dass diese nicht in den Standardbibliotheken enthalten sind, so dass Sie den Code selbst in Ihr Projekt einbinden müssen.
Hier ist die Quelle zu einer wstrlcat
Funktion:
/* * 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. Wie verkettet man zwischen zwei Variablen?
- 2. Wie verkettet man zwei Matrizen in Python?
- 3. Wie verkettet man BiFunctions?
- 4. Wie man zwei Parameterpakete zusammen benutzt?
- 5. Wie verkettet man das unten:
- 6. Wie verkettet man Vektoren in Eigen?
- 7. Wie verkettet man mehrere Unicode-Strings?
- 8. Wie verkettet man "element" und "element.all"?
- 9. Wie initialisiert man eine Variable wchar_t?
- 10. Native Calling Interface: Wie übersetzt man "wchar_t"?
- 11. Wie man Django verkettet wählt in Forms.py?
- 12. Zwei ViewPager zusammen steuern
- 13. Schließen zwei Bögen zusammen
- 14. Wie Konstruktoren aus zwei Klassen zusammen arbeiten
- 15. Wie fügt man zwei Variablen in PHP zusammen?
- 16. Wie man zwei verschiedene Array-Objekte zusammen bekommt
- 17. Schienen Union Hack, wie man zwei verschiedene Abfragen zusammen
- 18. Wie verwendet man zwei Rahmen (zusammen) in wxPython
- 19. Putting zwei Bytes zusammen
- 20. Concat zwei Strings zusammen
- 21. Putting zwei Arrays zusammen
- 22. Zwei Summenabfragen zusammen
- 23. Wie zwei tcpdump-Dateien (PCAP-Dateien) verkettet werden
- 24. Wie werden zwei Arrays in Python vertikal verkettet?
- 25. Anfrage zwei Modelle zusammen
- 26. Ersetzen Wchar_t
- 27. NSString zu wchar_t *?
- 28. Wchar_t Zeiger
- 29. Wie füge ich zwei Textdateien zusammen?
- 30. Wie füge ich zwei Tabellen zusammen?
Wenn Sie meinen, mit „veraltet“, die Standard-Funktionen, die Microsoft nicht mag, dann nicht die Mühe. Willst du wirklich Verkäufer-Lock-in, aber immer noch keine absolute Sicherheit? Definieren Sie einfach '_CRT_SECURE_NO_WARNINGS' in der Projektdatei, und VC++ wird den Mund halten. – MSalters