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_


Anmelden zum Antworten