Problem bei format, andere Variable wird überschrieben

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
  • Ich wusste nicht, wie ich den Thread am besten nennen soll.


    Also Ich habe ein Mute-System geschrieben, komplett dynamisch mit ablaufende Zeit und so, funktioniert auch alles.


    Die Funktion (Auszug)


    Spieler-ID (Aus der accounts-Tabelle "id") 1 hat den Spieler mit der ID gemutet, also müsste in die Variable pMuteAdmin 1 geschrieben werden. Funktioniert auch, bis

    Code
    format(PlayerInfo[playerid][pMuteReason], 100, "%s", reason);

    aufgerufen wird. Dannach wird der pMuteAdmin mit der Zahl 101 überschrieben.


    Des weiteren wenn ich statt 100 als format-Länge sizeof(PlayerInfo[playerid][pMuteReason]) angebe, spuckt er Erros:

    Code
    C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 001: expected token: "]", but found "-identifier-"
    C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : warning 215: expression has no effect
    C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 001: expected token: ";", but found "]"
    C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 029: invalid expression, assumed zero
    C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : fatal error 107: too many error messages on one line


    Da ich es Debugt hab, ab wann die Variable pMuteAdmin überschrieben wird; sobald per format der Grund (pMuteReason) geschrieben wird.


    Zusätzlich noch die ENUM-Variablen (Auszug):

    Code
    enum E_PLAYER {
        pDB,
        pLevel,
        pMute,
        pMuteTime,
        pMuteEnd,
        pMuteReason[100],
        pMuteAdmin
    };


    Ich habe keine weitere sinnvolle Idee da ich keine Ansätze habe woran es liegt.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Es gibt weder ein maximaler Grund noch soll es mit Defines gelöst werden, es soll Dynamisch sein :p xD


    Ich verstehe nur nicht, warum durch den format, der den Grund aus reason in pMuteReason schreibt, die Varriable pMuteAdmin auch und fehlerhaft überschrieben wird.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Beitrag von Mogly1 ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Sry ich bin Lost ().
    • Hilfreich

    Das Problem dürfte das EOS Zeichen (End of String) sein, welches sich danach platziert. Da enums für PAWN nur aneinandergereihte Werte sind, überschreibt es dir den nächsten enum-Wert, vermutlich mit dem EOS Zeichen.


    Du kannst es so lösen:

    #define MAX_REASON_LENGTH 100

    pMuteReason[MAX_REASON_LENGTH+1],


    und

    format(PlayerInfo[playerid][pMuteReason], MAX_REASON_LENGTH, reason);

  • Was wäre SAMP nur ohne Jeffry <3:S


    Muss ich das bei jedem Enum machen, wo dieser ein String ist? Mit diesen End of String habe ich nur halb verstanden aber das was du sagst kling schlüssig und funktioniert.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen