2D Array



  • Hallo,

    ich komme bei Arrays einfach nicht weiter... 😞

    Ich möchte mir ein 2D Array anlegen indem ich Wertepaare abspeichere und zwar so, dass ich dann später den Schlüßel "key0" mit dem Wert "wert0" verbinden kann.

    "key0" "wert0"
    

    Ich erstelle mein Array so:

    for (int j = 0; j < 1; j++) {
    
        strcpy(pcIndex, (itoa(j, pcIndexBuff, nBase)));
    
        strncat((strcpy(pcKey, KEY)),
                 pcIndex,
                 strlen(pcIndex));
    
        strncpy(pcID[j][0], pcKey, strlen(pcKey));
    
        strncat((strcpy(pcValue, VALUE)),
                 pcIndex,
                 strlen(pcIndex));
    
        strncpy(pcID[j][1], pcValue, strlen(pcValue));
    
     printf("KEY: %s\n", pcID[j][0]);
     printf("VALUE: %s\n", pcID[j][1]);
    
     }
    

    ...nach dem printf() steht leider:

    KeyValue0
    Value0
    

    Mein Zile wäre aber:

    Key0
    Value0
    

    Danke für die Tipps.



  • Mit C++ wär das nicht passiert ... 😉

    Ich bastele das mal um ....

    // für Key-Value-Paare gibt's die wunderschöne map
        map<string, string> ID;
        ID[KEY] = VALUE;
    

    Fertig.

    Nachtrag:
    Und selbst die C-Funktionen verwendest Du "ungewöhnlich":
    - warum mal strcpy(), strlen() aber sonst die strn__-varianten ?
    - die strn___-Varianten sind dafür da, die maximal zu schreibende Länge (also üblicherweise die Länge des ZIELbuffers) anzugeben und nicht die des Quellbuffers)
    - ist pcID wirklich ein 3D-Array ? Schließlich willst Du doch nicht nur einzelne Zeichen ablegen, oder ? Und für eine Zeichenkette bräuchtest Du auch ein Array...

    Gruß,

    Simon2.



  • Wie ist denn dein Array definiert?

    (btw, wenn du zwei Werte zusammenfassen willst, nimm lieber vector<pair> oder map<>)



  • CStoll schrieb:

    Wie ist denn dein Array definiert?

    char pcID[][2][256];
    


  • wenn du schon im c++ forum postest, wie wärs mit ner

    std::map<string, int>
    

    ??



  • Wenn ich

    "key0" "wert0"
    

    richtig interpretiere, dann wird eine std::map<std::string, std::string> genau das sein, was der OP sucht 😉

    Beispiel (nicht getestet)

    std::map<std::string, std::string>daten;
    daten[std::string("key0")] = std::string("wert0");
    daten[std::string("key1")] = std::string("wert1");
    // und vice versa:
    std::cout << daten[std::string("key0")] << std::endl;
    

    Wenn dich die *std::*s verwirren, dann such nach namespaces ;).

    Siehe dazu: http://www.cpp-tutor.de/cpp/le18/le18_01.htm#map

    Grüße...

    Heiko

    EDIT: Ursprünglichen Beitrag auf das Kommentar von CStoll überarbeitet/korrigiert.



  • bwbg schrieb:

    Wenn ich

    "key0" "wert0"
    

    richtig interpretiere, dann wird eine std::map< pair<std::string, std::string> > genau das sein, was der OP sucht 😉

    Fast - die map<> kümmert sich selber darum, daß Schlüssel und Werte in ein pair<> zusammengefasst werden, also heißt's korrekt "std::mapstd::string,std::string"





  • @CStoll:

    Danke für die Info. Ich habe den Originalbeitrag entsprechend korrigiert.

    Grüße... Heiko



  • map and Co., also Luxusfunktionen habe ich leider nicht (nachinstallieren etc. geht nicht). Ich bin dann wohl bei C++ falsch, Sorry. 🙄

    ps: soll ich nochmal bei C-Forum das gleiche posten oder regelt das der Moderator? 😕



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • shuriko schrieb:

    map and Co., also Luxusfunktionen habe ich leider nicht (nachinstallieren etc. geht nicht). Ich bin dann wohl bei C++ falsch, Sorry. 🙄

    Dann schreib doch mal dazu, wie dein Array definiert ist - vermutlich findet sich dort schon ein Fehler.

    ps: soll ich nochmal bei C-Forum das gleiche posten oder regelt das der Moderator? 😕

    wie du siehst, wird das recht schnell geregelt 😉



  • Simon2 schrieb:

    - warum mal strcpy(), strlen() aber sonst die strn__-varianten ?

    Darf man nicht?

    Simon2 schrieb:

    - die strn___-Varianten sind dafür da, die maximal zu schreibende Länge (also üblicherweise die Länge des ZIELbuffers) anzugeben und nicht die des Quellbuffers)

    Ok, das wusste ich nicht. Ich dachte immer, dass ich im ZIEL genug Platz habe und speichere nur göße der Quelle. Dabei gehe davon aus, dass ich mir vorher Gedanken über der Zilegröße mache.

    Simon2 schrieb:

    - ist pcID wirklich ein 3D-Array ? Schließlich willst Du doch nicht nur einzelne Zeichen ablegen, oder ?

    char pcID[][2][256];
    

    🙄



  • shuriko schrieb:

    Ok, das wusste ich nicht. Ich dachte immer, dass ich im ZIEL genug Platz habe und speichere nur göße der Quelle. Dabei gehe davon aus, dass ich mir vorher Gedanken über der Zilegröße mache.

    Ok, dass war leichtsinnig... 🤡 Ich habe mal zu wenig oder zu viel... 🤡 🤡 🤡



  • shuriko schrieb:

    Simon2 schrieb:

    - warum mal strcpy(), strlen() aber sonst die strn__-varianten ?

    Darf man nicht?...

    Klar - darf man alles !
    Aber die strn__-Varianten bieten ein Mehr an Sicherheit, das man ruhig konsequent nutzen sollte (so wie im Auto nicht alle angeschnallt sein MÜSSEN, aber SOLLTEN).

    shuriko schrieb:

    ...
    Ok, das wusste ich nicht. Ich dachte immer, dass ich im ZIEL genug Platz habe ... Dabei gehe davon aus, dass ich mir vorher Gedanken über der Zilegröße mache. ...

    Wenn Du DAS sicher weißt, brauchst Du überhaupt keine strn___-Funktionen.
    Für mich als Codelesenden bedeutet das:
    - "Sehe ich n" => "Programmierer hat berücksichtigt, dass die Ziellänge zu klein sein könnte"
    - "Sehe ich KEIN n" => "Programmierer hat sichergestellt, dass die Ziellänge IMMER reicht"

    ... da irritiert so ein "Mischmasch" schon.

    shuriko schrieb:

    Simon2 schrieb:

    - ist pcID wirklich ein 3D-Array ? Schließlich willst Du doch nicht nur einzelne Zeichen ablegen, oder ?

    char pcID[][2][256];
    

    🙄

    da brauchst Du gar nicht so mit den Augen zu rollen, denn das hat Du erst NACH meinem Post geschrieben ... und sowohl im Titel als auch im Eröffnungspost von einem 2D-Array geschrieben. :p

    Gruß,

    Simon2.



  • Simon2 schrieb:

    da brauchst Du gar nicht so mit den Augen zu rollen, denn das hat Du erst NACH meinem Post geschrieben ...

    Neeee... das war schon um 10:33:37 12.10.2007 🙄 😉 Aber egal, danke.


Anmelden zum Antworten