Länge einen strings abfragen

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
  • Hey wie kann ich die länge eines Strings abfragen
    weil bei mir ist es so, bei /kennzeichen wird die länge nicht abgefragt, wenn man
    mehr wie 9 zeichen eingibt, geht der server down...



    dcmd_kennzeichen(playerid,params[])
    {
    new kz[15];
    if(sscanf(params,"s", kz)) { return SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /kennzeichen [Text(Höchstens 9 Buchstaben/Zahlen)]"); }
    if(!IsPlayerInAnyVehicle(playerid)) { return SendClientMessage(playerid, COLOR_GRAD1, "Du bist in keinem Fahrzeug!"); }
    if(KennzeichenErlaubnis[playerid] == 0) { return SendClientMessage(playerid, COLOR_GRAD1, "Du hast kein Kennzeichen in der Stadthalle gekauft!"); }
    if(Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]])
    {
    new vehiclefid = GetPlayerVehicleID(playerid);
    SetVehicleNumberPlate(vehiclefid, kz);
    SetVehicleToRespawn(vehiclefid);
    new Float: X,Float: Y,Float: Z;
    GetPlayerPos(playerid,X,Y,Z);
    SetVehiclePos(vehiclefid,X,Y,Z);
    PutPlayerInVehicle(playerid,vehiclefid,0);
    new name[MAX_PLAYER_NAME], str[128];
    GetPlayerName(playerid, name, sizeof name);
    format(str, sizeof str, "/Autos/%s%d.dtcar", name,Dtc_PlayerKey[playerid]);
    dini_Set(str, "Plate", kz);
    for(new x = 0; x < MaxVeh; x++)
    {
    PlayerCar[playerid][x][Plate] = kz;
    }
    KennzeichenErlaubnis[playerid] = 0;
    }
    return 1;
    }

  • So
    PlayerCar[playerid][x][Plate] = kz;
    setzt an sicherlich auch keinen string.
    entweder strmid, format oder memcpy,
    aber NIEMALS eine einfache Zuweisung wenn es ums strings/Arrays geht die unterschiedlich groß sind
    und das ist dier definitiv der Fall.


    Somit hast du einen Bufferoverflow oder sogar Bufferunderflow -> crash

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski