*char mit unbegrenzter Länge?
-
Hallo Zusammen,
ich habe (mal wieder
) ein kleines Problem:Ich habe folgende Struct:
struct line{ char Text[30]; };und ein Array dieser Struct:
line speicher[50];wenn ich nun eine Funktion
void irgendeineFunktion(const char * Text)so Aufrufe,
irgendeineFunktion(speicher[1].Text)erhält diese Funktion nicht nur 30 Zeilen (sondern alle 1500) und arbeitet deshalb auch falsch.
Auf den Quellcode der Funktion habe ich leider keinen zugriff. Wie kann ich nun dieser Funktion nur 30 Zeichen übergeben?mfg, jonnybx
-
Ganz einfach: Benutze std::string!
Edit: Und die Übergabe an die Funktion machst Du dann per meinString.c_str().
-
++theta;
Aber zu dem Fehler: Ist der Text denn nullterminiert?
-
du hast das glück das du ind einem struct keine anderen member hast. der standard garantiert dass bei nem array alle elemente hinterienander liegen, so und deshalb leigen bei dir alle 1500 chars hintereinander und ohne kontrolle checken normale funktionen alle chars dann ab (sprich ohne abschliessende 0)
-
@cooky451
Ich habe es versucht, indem ich am ende \0 angefügt habe, es hat aber nicht funktioniert.Ich habe es jetzt mit std::string versucht, jedoch kann ich nicht herausfinden wie ich einem String ein einzelnes char anfüge.
-
mit +
-
jedoch kann ich nicht herausfinden wie ich einem String ein einzelnes char anfüge.
Entweder mit += oder mit append(..)
-
Und ein Struct mit nur einem Member wird bei dir höchstwahrscheinlich auch wenig Sinn machen.
-
jonnybx schrieb:
@cooky451
Ich habe es versucht, indem ich am ende \0 angefügt habe, es hat aber nicht funktioniert.Dann zeig mal den Code dazu. Der ist mit Sicherheit falsch!
-
Ich kann den Fehler nicht reproduzieren.
#include <iostream> struct line{ char Text[30]; }; void irgendeineFunktion(const char * Text) { std::cout << Text << std::endl; } int main() { line speicher[50]; std::strcpy(speicher[1].Text, "Test!"); irgendeineFunktion(speicher[1].Text); return 0; }Warum nutzt du nicht std::string?
#include <iostream> #include <string> struct line{ std::string Text; }; void irgendeineFunktion(const std::string& Text) { std::cout << Text << std::endl; } int main() { line speicher[50]; speicher[1].Text = "Dieser Text kann beliebig lang sein und lässt sich einfacher verwenden als der andere Mist"; speicher[1].Text += "!!!!!!!!!!"; // Anhängen irgendeineFunktion(speicher[1].Text); return 0; }