[Problem]: Auslesen der 2.D. Arrays

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Servus liebe Community
    Ich sitze momentan an dem Problem, dass ich die Länge eines 2 Dimensionalen Arrays abfragen muss. Ich habe mich bereits erkundigt, dass einige dafür "strlen" nutzen. Damit komme ich allerdings nicht weiter und mit sizeof erhalte ich einen Error. Bei folgendem Array möchte ich die Anzahl der Skins in jeder Dimension auslesen können.



    new FrakSkinM[][] =
    {
    {1,2,7,15,21,22,26},
    {265,267,266,281,282,283},
    {265,267,266,281,282,283},
    {265,267,266,281,282,283}
    };


    strlen(FrakSkinM[PlayerInfo[playerid][pFrak]]) //Ergebnis = 52
    sizeof(FrakSkinM[PlayerInfo[playerid][pFrak]]) //Gibt einen Error: error 001: expected token: "]", but found "-identifier-"


    Wäre schön wenn ihr mir da helfen könnt.


    Euer zSkiLL.exe

  • Beitrag von AirM4X ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Mit strlen oder sizeof kommst du nicht weiter.


    Also am schnellsten und einfachsten wäre es, wenn du es statisch machst z.B. einfach so:


    stock GetLen(x) return ((x)==0)?7:6;


    //Nutzen kannst du das dann so:
    const frakid = 0;
    printf("%d",GetLen(frakid)); //Gibt dir dann halt 7 zurück da der 0te index in deinem Array 7 Einträge hat, alle anderen 6


    Wenn du es dynamischer haben willst, musst du mit einem End-Byte arbeiten, z.B. so:


    //Dann schreib das Array so:
    stock const FrakSkinM[][] =
    {
    {1,2,7,15,21,22,26,-1},
    {265,267,266,281,282,283,-1},
    {265,267,266,281,282,283,-1},
    {265,267,266,281,282,283,-1}
    };


    //Und die Funktion:
    stock GetLen(const str[])
    {
    new idx;
    for(new i=str[0]; i!=-1; i=str[++idx]){}
    return idx;
    }


    //und nutzung:
    const frakid=0;
    printf("%d",GetLen(FrakSkinM[frakid])); //Gibt 7 aus


    Da jede Zeile die gleiche Größe haben muss


    Das stimmt nicht.


    stock const FrakSkinM[][] =
    {
    {1,2,3},
    {1,2,3,4}
    };


    Kann man gut machen, da funktioniert aber das sizeof(FrakSkinM[]) nicht :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Das stimmt nicht.


    Oh ja stimmt, er hat ja keine Größe angegeben. Hätte ich mal besser ausgeschlafen. :pinch:



    Mit strlen oder sizeof kommst du nicht weiter.


    Dachte ich auch, aber mir kam eine Idee die wirklich simpel ist.
    new FrakSkinM[][] = //Oder als const, wie man's will
    {
    {1,2,7,15,21,22,'\0'},
    {1,2,3,4,5,6,7,8,9,10,265,267,266,'\0'},
    {265,267,'\0'},
    {265,267,266,281,'\0'}
    };


    printf("%d", strlen(FrakSkinM[1])); //Gibt 13 aus.
    printf("%d", strlen(FrakSkinM[2])); //Gibt 2 aus.


    [NRL] zSkiLL.exe:
    Wenn du es so machst, dann kannst du einfach wie in deinem Versuch:
    strlen(FrakSkinM[PlayerInfo[playerid][pFrak]])
    nutzen.


    Dann spart man sich die Schleifendurchläufe.