String wird immer kleiner obwohl er gar keinen Wert haben soll(te)

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
  • for(new r = 1; r < MAX_FACTION_RANKS; r++) {
    printf("rank: %d | strlen: %d", r, strlen(xxx));
    if(strlen(FactionRanks[xxx][r]) > 0) {
    format(strx, (MAX_PERMISSIONS_LENGTH+20*MAX_FACTION_RANKS), "%s%02d\t%s\n",\
    strx, r, FactionRanks[xxx][r]);
    }
    }


    Der sollte mir lediglich EINEN Rank ausgeben, da nur einer quasi einen Namen hat.
    Er gibt mir aber eine solche Grütze aus (siehe Anhang).
    Ich bin ratlos. Habe alles möglich debugged. Geladen werden die Ränke richtig.


    Er sollte nur Rank 1 anzeigen, denn das ist der einzige mit 'ner strlen() > 0.
    Sprich:
    rank: 1 | strlen: 14
    rank: 2 | strlen: 0
    rank: 3 | strlen: 0
    ...

  • Ich blicke ehrlich gesagt nicht ganz durch, was das machen soll... Edit: Ach du bist es, dann habe ich eine Vermutung ^^


    FactionRanks[Character[playerid][User::Get(playerid, "ActiveCharacter")][cFaction]][r] ist der Rangname einer Faction, so weit bin ich schon. Und du loopst alle Ränge ( bis 20 ) durch. Wenn der Name des Ranges länger als 1 ist wird der an strx angehängt...
    Hast du mal die einzelnden Ränge mit an die Query ran gehängt um zu gucken, warum strlen über 0 kommt ?


    printf("rank: %d | strlen: %d\n > %s", r, strlen(FactionRanks[Character[playerid][User::Get(playerid, "ActiveCharacter")][cFaction]][r]), FactionRanks[Character[playerid][User::Get(playerid, "ActiveCharacter")][cFaction]][r]);

  • Schon mal daran gedacht, dass das printf über der If abfrage ist :D?

    SO wie ich es verstanden habe sollte nur bei dem ersten Wert strlen einen Wert zurück geben und danach immer 0, was es aber nicht macht...
    Das erste soll die gewünschte AUsgabe zeigen, das Zweite ist die aktuelle ;)


    Ach es ist TutNichts: :D
    Ich dachte schon es währe @IrgendeinRandomUser: :D
    Ich meinte damit, dass es sich damit vermutlich um den Inhalt unserer PMs gehandelt hat, ich achte normal nicht auf Benutzernamen / Avatare :D


    Nein, wir wissen jetzt schon mal, dass das Problem in der Instanzierung der Strings liegt, da es immer ein Zeichen weniger wird... Wie werden die denn erzeugt / das erste mal belegt ?
    Und so sieht das doch recht schön aus, warum lassen wir es nicht so ? :S

  • Tion: ich weiß, dass du mit "die Vermutung" auf die PN anspielen wolltest und hab das ja auch bestätigt. :D


    Zu den Fraktionsränken (also zu den Strings, die du, denke ich, meinst), habe ich folgendes im Angebot:
    new FactionRanks[MAX_FACTIONS][MAX_FACTION_RANKS]; //Global
    stock System_LoadFactionRanks(factionID) {
    new Result[400],
    Query[150],
    __int[2],
    __str[25];
    format(Query, 150, "SELECT * FROM `qco_faction_ranks` WHERE `factionID` = %d", factionID);
    Database::query(Query);
    Database::store_result();
    while(Database::fetch_row(Result)) {
    sscanf(Result, "p<|>{d}{d}dds[25]", __int[0], __int[1], __str);
    FactionLeaderRanks[factionID][__int[0]] = __int[1];
    format(FactionRanks[factionID][__int[0]], 25, "%s", __str);
    printf("Load, RankID: %d | Name: %s", __int[0], FactionRanks[factionID][__int[0]]);
    }
    return 1;
    }


    Und er gibt mir wunderbar nur 1x aus:

    Code
    Load, RankID: 1 | Name: Auszubildender