"String" im 2d char array abspeichern



  • Hallo Leute,

    folgendes:
    Ich möchte im 2d char array 10 "Strings" (Je String max. 100 Zeichen) abspeichern.

    Mein struct namens Auto:

    typedef struct{
    	char *sonderausstattung[10][100];
    }Auto;
    

    Des Weiteren habe ich die Funktion:

    void fuegeAusstattungEin(Auto fahrzeug, char *ausstattungsmerkmal){
    	fahrzeug.sonderausstattung[0][100] = ausstattungsmerkmal;
    }
    

    Würde ich jetzt das Ganze (in der main()) mal ausgeben:

    Auto fahrzeug;
    fuegeAusstattungEin(fahrzeug, "Keine Ahnung was hier stehen soll");
    printf("%s", fahrzeug.sonderausstattung[0]);
    

    Dann gibt er einfach mal nichts aus!? Was mache ich eigentlich falsch? Ich habe mich zur Thematik Pointer informiert, nur ich verstehe nicht wie ich in Kombination mit Funktionen und Arrays dies zum Laufen bekomme...

    Kann wer mir bitte weiterhelfen/Tipps geben?

    Vielen Dank im Voraus.

    Mit freundlichen Grüßen
    dunnowhy



  • @dunnowhy sagte in "String" im 2d char array abspeichern:

    Ich möchte im 2d char array 10 "Strings" (Je String max. 100 Zeichen) abspeichern.

    1 char[] mit max. 100 Zeichen (inklusive Nullterminator): char str[100];
    10 char[] mit max. 100 Zeichen (inklusive Nullterminator): char str[10][100];

    Du: char *sonderausstattung[10][100];
    Was tut das Sternchen da?

    @dunnowhy sagte in "String" im 2d char array abspeichern:

    Des Weiteren habe ich die Funktion:

    void fuegeAusstattungEin(Auto fahrzeug, char *ausstattungsmerkmal){
    	fahrzeug.sonderausstattung[0][100] = ausstattungsmerkmal;
    }
    

    Beim übergeben von Auto wird der Parameter kopiert. Änderungen daran wirken sich nicht auf die Variable aus, die Du der Funktion übergibst. Nimm einen Pointer auf Auto.

    fahrzeug.sonderausstattung[0][100] = ausstattungsmerkmal;
    

    Davon abgesehen, daß fahrzeug.sonderausstattung[0][100] nicht existiert (geht bis [][99]) nimmt man zum Kopieren von Zeichenketten strcpy(), besser strncpy().



  • @Swordfish Hi,
    vielen Dank erst mal für die Mühe.

    Ja stimmt, gar nicht mehr daran gedacht, dass es in dem Fall Call-by-Value ist...

    Zu char *sonderausstattung[10][100]; weiß ich selber nicht wieso ... ich hatte danach gegoogelt und vieles versucht ...

    Okay, ich soll einen Pointer auf Auto nehmen. Wie mache ich das? Soll ich einfach in der main-Funktion ein Auto *fahrzeug deklarieren? Wie würde ich dann darauf in der Funktion fuegeAusstattungEin(...) zugreifen?

    Bei einfachen Beispielen verstehe ich wie ein Pointer funktioniert, aber sobald diese in Kombination mit Arrays und Funktionen sind, dann tue ich mich sehr schwer...

    Vielen Dank!

    Gruß



  • #include <stddef.h>
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_SONDERAUSSTATTUNG 10
    #define MAX_SONDERAUSSTATTUNG_LENGTH 100
    
    typedef struct {
    	char sonderausstattung[MAX_SONDERAUSSTATTUNG][MAX_SONDERAUSSTATTUNG_LENGTH + 1];
    	size_t sonderausstattung_count;
    } Auto;
    
    void AutoInit(Auto * fahrzeug)
    {
    	fahrzeug->sonderausstattung_count = 0;
    }
    
    void fuegeAusstattungEin(Auto * fahrzeug, char const * ausstattungsmerkmal)
    {
    	if (fahrzeug->sonderausstattung_count < MAX_SONDERAUSSTATTUNG) {
    		strncpy(fahrzeug->sonderausstattung[fahrzeug->sonderausstattung_count], ausstattungsmerkmal, MAX_SONDERAUSSTATTUNG_LENGTH);
    		fahrzeug->sonderausstattung[fahrzeug->sonderausstattung_count][MAX_SONDERAUSSTATTUNG_LENGTH] = '\0';
    		++fahrzeug->sonderausstattung_count;
    	}
    }
    
    int main(void)
    {
    	Auto kfz;
    	AutoInit(&kfz);
    	fuegeAusstattungEin(&kfz, "Bla");
    	fuegeAusstattungEin(&kfz, "Blubb");
    	fuegeAusstattungEin(&kfz, "Soso");
    	fuegeAusstattungEin(&kfz, "Nada");
    	fuegeAusstattungEin(&kfz, "Gugu");
    
    	for(size_t i = 0; i < kfz.sonderausstattung_count; ++i)
    		puts(kfz.sonderausstattung[i]);
    }
    


  • @dunnowhy sagte in "String" im 2d char array abspeichern:

    Kann wer mir bitte weiterhelfen/Tipps geben?

    Benutze so oft wie möglich std::string statt char arrays.



  • @tggc sagte in "String" im 2d char array abspeichern:

    @dunnowhy sagte in "String" im 2d char array abspeichern:

    Kann wer mir bitte weiterhelfen/Tipps geben?

    Benutze so oft wie möglich std::string statt char arrays.

    Guten Morgen,

    möchtest du dir nochmal das Unterforum ansehen?



  • Man kann auch mit dem Hammer schrauben. Aber warum?



  • @tggc sagte in "String" im 2d char array abspeichern:

    Aber warum?

    Weil man Nägel so schlecht schrauben kann?