Zeiger Strukturen und Funktionen
-
Hey @all,
und zwar habe ich folgendes Problem.
Ich habe eine Struktur die wie folgt aufgebaut ist.
struct Data { char d1[150]; char d2[30]; char d3[70]; };
Nun habe ich mir folgende Routine gebastelt:
Data p; unsigned int size = 0; if(TextString.length()>sizeof(p.d1)) size = sizeof(p.d1); else if(TextString.length()<sizeof(p.d1)) size = TextString.length(); for(unsigned int i=0; i<size; ++i) { p.d1[i] = TextString[i]; } p.d1[size] = '\0';
Da ich das ganze aber nicht 3x hintereinander machen will, hatte ich vor mir eine Funktion dafür zu schreiben ala:
void Str2Struct(char* struct_data, std::string text) { unsigned int size = 0; if(text.length()>sizeof(p.struct_data)) size = sizeof(p.struct_data); else if(text.length()<sizeof(p.struct_data)) size = text.length(); for(unsigned int i=0; i<size; ++i) { p.struct_data[i] = text[i]; } p.struct_data[size] = '\0'; }
Aufrufen würde ich das ganze dann so:
Data p; std::string line; getline(cin, line); Str2Struct(p.d1, "Test"); Str2Struct(p.d2, "Schon wieder ein Test"); Str2Struct(p.d3, line);
Aber irgendwie schreibt er mir beim sizeof in der Funktion nicht den Wert 150 sondern den Wert 4. Somit funktioniert die ganze Funktion nicht. Kann mir diesbezüglich jemand helfen
Lg _freeze_
-
Aber irgendwie schreibt er mir beim sizeof in der Funktion nicht den Wert 150 sondern den Wert 4
du übergibst ja auch kein array, sondern nur einen zeiger. Und ein zeiger ist genau 4 Byte groß.
um ein array mit seinen spezifikationen zu übergeben, solltest du templates benutzen, dann brauchste auch kein sizeof mehr
-
Hallo,
danke für die schnelle Antwort.
Kannst Du mir diesbezüglich bitte ein Beispiel geben?
Lg _freeze_