sizeof/strlen bei 'noch' derzeit unbekannter Stringgröße

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
  • So Leute, jetzt wollte ich mal eine Frage stellen ^^


    stock ReplaceWordInString(string[], const findstr[], const repstr[]) //by Templer
    {
    new length = 512, cache[512], pos = strfind(string, findstr, true);
    if(strlen(repstr) != strlen(findstr))
    {
    strmid(cache, string, pos+strlen(findstr), length);
    strdel(string, pos, length);
    strins(string, repstr, pos, length);
    strcat(string, cache, length);
    }
    else
    {
    strdel(string, pos, pos+strlen(findstr));
    strins(string, repstr, pos, length);
    }
    return string;
    }


    Wie man sieht wird cache mit 512 gesetzt. Jedoch ist das unsinnig und nicht so schön und wollte ja eigentlich cache die größe vom string geben, jedoch ergeben bei sizeof oder strlen folgende Fehlermeldung:

    warning 224: indeterminate array size in "sizeof" expression (symbol "")
    Also wie kann ich von diesem string nun die Größe herausfinden ^^


    Hoffe auf ne Antwort, Danke


    Mfg Templer

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Hmm, bei mir kommt da aber kein warn


    stock ReplaceWordInString(string[], const findstr[], const repstr[]) //by Templer
    {
    new length = 512, cache[sizeof(string)], pos = strfind(string, findstr, true);
    if(strlen(repstr) != strlen(findstr))
    {
    strmid(cache, string, pos+strlen(findstr), length);
    strdel(string, pos, length);
    strins(string, repstr, pos, length);
    strcat(string, cache, length);
    }
    else
    {
    strdel(string, pos, pos+strlen(findstr));
    strins(string, repstr, pos, length);
    }
    return string;
    }


    Oder verstehe ich etwas falsch?


    MFG, Robdeflop®

  • Ok Jungs, ihr müsst den stock auch nützen ^^ Ein stock ist temporär und wird erst mit kompiliert, wenn er benützt wird, also schreibt mal irgendwohin das:

    ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!");


    Also wenn einer nun Deine Mudda stinkt! schreiben würde, wird er umbenannt in Deine Mudda riecht gut! ^^


    Edit:// Weil Schnacke fragte wie man es als Befehl Testen könnte hier:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/test", false))
    {
    printf("%s", ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!"));
    return 1;
    }
    return 0;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Templer ()

  • Hi


    oO sehe auch grad xD
    Du willst bestimmt sowas machen wie ne Badwordlist :D
    Ich habe mal sowas hier im forum gefragt, aber habs dann doch nicht verwendet, da es spaß macht mal ein bissl zu beleidigen^^


    Wenn ich es so mache, wie ich es gepostet habe und den stock auch verwende kommen folgende Errors/Warns:


    Zitat

    D:\Rockstar Games Server\GTA San Andreas 0.3\gamemodes\CSRLmysql.pwn(14714) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
    D:\Rockstar Games Server\GTA San Andreas 0.3\gamemodes\CSRLmysql.pwn(14714) : error 009: invalid array size (negative, zero or out of bounds)
    D:\Rockstar Games Server\GTA San Andreas 0.3\gamemodes\CSRLmysql.pwn(14714) : error 029: invalid expression, assumed zero
    D:\Rockstar Games Server\GTA San Andreas 0.3\gamemodes\CSRLmysql.pwn(14714) : error 017: undefined symbol "pos"
    D:\Rockstar Games Server\GTA San Andreas 0.3\gamemodes\CSRLmysql.pwn(14714) : fatal error 107: too many error messages on one line


    Woran das liegt frag ich mich auch xD Sollte ja eigendlich klappen.


    Why willstn das mit strlen oda sizeof machen? Rescourcensparender?


    MFG, Robdeflop®

  • Nicht nur das, denn wenn der string 1024 groß wäre, würde es nicht klappen, da ich nur 512 festgelegt habe, verstehst ^^ Aber nein nicht als Badwordlist, sondern als was anders aber egal ^^ Mal gucken ob wer das Prob lösen kann.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • @ Defcon666 Unterstützt sollte 1024 Zeichen ^^ Aber das wäre schwachsinnig wie 512...

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • jo, stimmt defcon^^ Is aber glaube ich 200 Zeichen, kann mich aber irren.


    So. Hab ma n bissl rumgespielt. Stimmt das?


    stock ReplaceWordInString(string[], const findstr[], const repstr[]) //by Templer
    {
    new lang;
    lang = strlen(string);
    new cache[sizeof(lang)], pos = strfind(string, findstr, true);
    if(strlen(repstr) != strlen(findstr))
    {
    strmid(cache, string, pos+strlen(findstr), lang);
    strdel(string, pos, lang);
    strins(string, repstr, pos, lang);
    strcat(string, cache, lang);
    }
    else
    {
    strdel(string, pos, pos+strlen(findstr));
    strins(string, repstr, pos, lang);
    }
    return string;
    }


    Da kommen keine errors oda warns ;)


    MFG, Robdeflop®

  • wenn du


    printf("Zeichen: %d", sizeof lang);


    machst, wirst du 2 oder 3 herausbekommen, meines wissens.. Nicht die länge von string. Nimm mal bei

    sizeof(lang)


    das sizeof weg ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • ups, stimmt xD


    Hmm, aber dann sollte doch trotzdem alles richtig sein oO Aber es kommen immernoch die errors/warns ?(
    Ich überleg nochma n bissl :D


    MFG, Robdeflop®


    Meines Wissens nach kannst du doch nich eine Länge eines unbekannten Strings abfragen..
    Auch wenn du du dann einen String zuweißt klappt das nicht, genau so wenig wie du ein Array mit einer Größe einer Variable (damit meine ich nicht Definitionen!) erstellst
    new bla[GetPlayerVehicleID(1)]; // Error!
    Also nimm als Länge einfach eine festgelegte Größe ;D