strncpy-Problem
-
Hallo, ich habe mal eine Frage zur Verwendung von strncpy. Was passiert denn mit den restlichen 250 Zeichen von rn? Sind die alle 0 oder wird rn nach dem fünften Zeichen abgeschnitten? Mir geht es nämlich darum keinen unnötigen Speicher zu belegen. Kann man das rn array evtl. auch dynamisch der Länge (text - name) anpassen?
char rn[255]; //strncpy(rn, name, text - name); strncpy(rn, "1234567890abcdef", 5); rn[5] = 0;
-
Student83 schrieb:
Kann man das rn array evtl. auch dynamisch der Länge (text - name) anpassen?
Ja mit std::string.
-
Eine Möglichkeit ist dieses hier.
char text[] = "1234567890abcdef";Aber wenn du diesen Text nicht wirklich als char vorligen haben musst, ist es in c++ besser einen std::string zu verwenden. std::string sagt es ja selber. ^^
#include <string> using namespace std; string text("1234567890abcdef");
-
Ich bin mir nicht sicher ob das mit std::string geht. Und zwar lese ich eine Xml-Datei ein und streame den Inhalt in dieser Variable
std::vector<char> data;.
Übergeben wird das ganze dann folgendermaßen an z.B. die Funktion ParseDocument
void ParseDocument(char *text); ParseDocument(&data[0]); // AufrufIch kann dann z.B. prüfen ob der char('>') vorkommt oder nicht:
if (*text == char('>')) { ++text;
-
du kannst die Datei auch in einen std::string-std::vector einlesen und dort mit z.B. mit der Methode find() den String auf ein '<' prüfen.
Dein Ansatz ist C du solltest dich mehr mit der STL beschäftigen. Diese bietet dir viel einfachere und solidere Möglichkeiten deine Probleme zu lösen.
-
Verändert ParseDocument text?
Wahrscheinlich nicht, also kannst du schreibenvoid ParseDocument(const char *text); void f() { std::string s = "Mein Text"; ParseDocument(s.c_str()); // oder, wenn du nur die Häufigkeit eines Buchstabens zählen möchtest size_t i = std::count(s.begin(),s.end(),'x'); (aus <alorithm>) }