So vermeiden Sie strcpy_s Puffer zu klein

Muss ich kopieren std::string data in ein char-array. Die Länge meiner Strings ist variabel, aber die Länge von meinem char-array ist fest.

const int SIZE = 5;

char name[SIZE];
std::string data = "1234567890";

strcpy_s(name, 5, data.c_str()); //causes a buffer is too small assertion
strcpy_s(name, 11, data.c_str());//copies fine (length of data plus null)
strcpy_s(name, sizeof(data), data.c_str()); //copies fine

Wie kann ich kopieren, nur die Länge des Arrays sicher jedes mal? Ohne die Geltendmachung und ohne Puffer laufen über.

Sollte ich es tun wie diese jedes mal, die?

std::string toCopy = data.substr(0,SIZE-1);
strcpy_s(name, toCopy.c_str());
  • Wenn dieser auf C++11, können Sie einfach die string-Puffer.
  • ja der C++ll. Können Sie mir ein Beispiel was du meinst??
  • wenn du meinst "mstrcpy_s(name, Daten.c_str());" dies gibt mir die assert-Fehler, die ich vermeiden will.
  • Nur tun s2 = s1; (oder einen substring, nach Bedarf) statt mit C-strings. Wenn Sie brauchen, das Zeichen, Zeiger, verwenden Sie &s2[0] für eine, die ist änderbar bis kurz vor den abschließenden null-terminator oder c_str() für eine nicht-modifizierbar eine.
InformationsquelleAutor Harry Boy | 2014-10-10
Schreibe einen Kommentar