Compiler Crasht - Zeile zu lang?

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
  • Hallo ihr Lieben,


    ja das Thema ist eigentlich relativ alt, dennoch haben viele Menschen Probleme damit und es gibt immer wieder falsche Lösungsansätze.


    Also schauen wir uns das ganze doch mal ein wenig an.


    Was ist das Problem?
    Wenn man eine zu lange Zeile in Pawno erstellt und diese compilt, dann kann es passieren, dass keine Fehlermeldung ausgegeben wird und der Compiler einfach crasht.
    Das ist ein Compiler Bug, es gibt einen Compiler Fix, aber man kann dies natürlich auch skript-technisch lösen.


    Das Problem tritt auf, wenn 512 Zeichen in einer Zeile überschritten werden.


    Wie kann man das Problem lösen?
    Meistens hat man einen langen Text in dieser Zeile, zum Beispiel:


    ShowPlayerDialog(playerid,0,DIALOG_STYLE_TEST,"Hallo","Dies ist ein sehr sehr sehr sehr langer Text!","Ok","");


    Viele denken nun, man kann folgendes tun:


    ShowPlayerDialog(playerid,0,DIALOG_STYLE_TEST,"Hallo","Dies ist ein sehr sehr \
    sehr sehr langer Text!","Ok","");


    Das ist FALSCH!


    Für den Compiler ist das immer noch eine Zeile. (Alles was zwischen den " steht, gilt für den Compiler als EINS.)


    Man könnte folgendes tun:


    ShowPlayerDialog(playerid,0,DIALOG_STYLE_TEST,"Hallo","Dies ist ein sehr sehr sehr sehr langer Text!","Ok","");


    Das wären für den Compiler jetzt 3 Zeilen und nicht mehr eine.
    Sieht aber halt kacke aus, ist unübersichtlich und meistens immer noch zu lang xD


    Deshalb gilt Funktionen zu nutzen, die den String zusammenführen:
    new string[64];
    strcat(string, "Dies ist ein sehr sehr ");
    strcat(string, "sehr sehr langer Text!");
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_TEST,"Hallo",string,"Ok","");


    //Edit:


    Ja, wenn man nun format nutzt, kann man das auch einfach aufteilen:



    new string[256];
    format(string,sizeof(string),"Dies ist der erste Teil mit ein Paar (%s) Variablen (%f).",x,y);
    format(string,sizeof(string),"%s Nun hängen wir noch was hinten dran! (%s)",string,z);

    Kurze Erklärung:
    In der 3. Zeile steht man Anfang ein %s dies ist wichtig, da gesagt wird, dass der String aus dem vorherigen format nun davor gehangen wird.
    (Deshalb steht auch hinten vor dem z nochmal das string).


    Schlusswort
    Ja, vielen ist das Problem bekannt und ein alter Hut, aber wollte nur kurz für alle Anfänger was dazu schreiben.


    Viel Spaß noch beim Skripten! :D

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Wie kann man das Problem lösen?

    In dem man einen Compiler nutzt, der das Problem nicht hat.


    https://github.com/pawn-lang/compiler/releases


    Alternativ sampctl benutzen in Verbindung mit VS Code

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

    Margarete Stokowski

  • In dem man einen Compiler nutzt, der das Problem nicht hat.

    ...hatte ich ja angesprochen:


    Das ist ein Compiler Bug, es gibt einen Compiler Fix, aber man kann dies natürlich auch skript-technisch lösen.

    Viele wollen halt keinen anderen Compiler verwenden.
    Deshalb nochmal die Erklärung wie man es alternativ löst.

    ast2ufdyxkb1.png


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

  • Viele wollen halt keinen anderen Compiler verwenden.

    Dieses Argument ist einfach dumm, tut mir Leid.


    Woher möchtest du das eigentlich wissen ?


    Bequemlichkeit ? Halte ich für Unsinn.
    Eher Unwissenheit, darüber das es dieses Projekt gibt das auch neue Features implementiert wie bspw. 4 Dimensionale Arrays.


    ...hatte ich ja angesprochen:

    Du redest von einem Compiler Fix, verlinkst ihn aber nicht sondern verweißt darauf, dass man es Scripttechnisch lösen kann, was nicht nur aufwendiger ist, sondern auch noch Zeit kostet ?
    Richtig gutes Zeug °L°

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

    Margarete Stokowski

  • Eher Unwissenheit, darüber das es dieses Projekt gibt das auch neue Features implementiert wie bspw. 4 Dimensionale Arrays.

    ...wenn ich dieses Projekt nicht kennen würde...hätte ich es ja wohl kaum angesprochen...#Logic


    Verstehe jetzt diesen Aggro-Front auch gar nicht.


    Ich habe es nicht verlinkt, weil 1x suchen ja genügt, aber finde es ja gut, dass du es verlinkt hast.


    Ja es gibt viele Leute, besonders Neulinge, die jetzt vielleicht nicht den neusten und coolsten Shit haben wollen, sondern nur ihr Zeug zum Laufen bekommen wollen.


    Für diese Leute ist das gedacht.


    Jeder der das ganze Zeug nutzt, hat ja auch erst gar nicht diese Probleme und kommt auf diesen Thread...




    Schalte mal einen Gang runter, das war nur ein nett gemeintes Tutorial.

    ast2ufdyxkb1.png


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

  • Ja es gibt viele Leute, besonders Neulinge, die jetzt vielleicht nicht den neusten und coolsten Shit haben wollen, sondern nur ihr Zeug zum Laufen bekommen wollen.

    Nur warum die Leute im Unklaren lassen ?
    Weil man selber der Meinung ist, dass ist "nicht mehr" nötig ?


    Den Fix im Nebensatz zu erwähnen ist mMn nicht das Gelbe vom Ei.

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

    Margarete Stokowski

  • Beitrag von Kasakow ()

    Dieser Beitrag wurde von Douq aus folgendem Grund gelöscht: Spam ().