Problem mit Strings



  • ja, besser 👍

    Edit: Ich würde anstatt gleich 0 aber gleich '\0' benutzen



  • Wenn du bei einem allokierten sting abkürzt, in dem du einfach an einer bestimmten position ein 0 Zeichen setzt hast allokierten Datenmüll! Der Ansatz von Boris ist schon die richtigere Richtung!



  • void removeEnd(char *s,int n)
    {
      s= realloc(s,strlen(s)-n);
    }
    

    EDIT: Hab in C schon ewig nichts mehr gemacht... deswegen das new/delete.. aber wen man wirklich nur ne 0 an der best. stelle setzen muss dann ok^^



  • Speicherloch schrieb:

    Wenn du bei einem allokierten sting abkürzt, in dem du einfach an einer bestimmten position ein 0 Zeichen setzt hast allokierten Datenmüll! Der Ansatz von Boris ist schon die richtigere Richtung!

    Blödsinn! Man kann den Speicher benutzen wie man möchte, auch Nullen hineinschreiben usw. Und Boris hat ja nun wirklich keinen Schimmer 👎



  • BorisDieKlinge schrieb:

    void removeEnd(char *s,int n)
    {
      s= realloc(s,strlen(s)-n);
    }
    

    Das wird ja immer schlimmer, du planloser Mensch 😞



  • naja und wenn ich Nullen in bereich reinschreibe die mich nicht angehen?

    muss der PC nicht wissen wo und wieviel speicher allokiert ist?

    EDIT: Ochjö wie gemein^^



  • BorisDieKlinge schrieb:

    void removeEnd(char *s,int n)
    {
      s= realloc(s,strlen(s)-n);
    }
    

    EDIT: Hab in C schon ewig nichts mehr gemacht... deswegen das new/delete.. aber wen man wirklich nur ne 0 an der best. stelle setzen muss dann ok^^

    Das wird genauso abschmieren wie deine new/delete Variante, wenn du die Funktion z.B. auf ein lokales char-Array loslässt.

    @Speicherloch: Die Heap-Funktionen (malloc() und Co.) verwenden nicht die Stringende-Marken, um sich zu notieren, wie lang ein allokierter Block ist - die haben ihre eigenen Verwaltungsdaten. Und solange du da nichts zerstörst (Indexüberschreitungen o.ä.), ist es egal, was du mit dem Datenblock machst.



  • BitWax schrieb:

    void CutEndOfString (char *lpString, int iCharsToCut)
    {
        int iStringLength = strlen (lpString);
        if (iStringLength < iCharsToCut)
        {
            strcpy (lpString, "");
            return;
        }
    
        int iCutting = iStringLength - iCharsToCut;
    
        int i = iStringLength;
        while (i > iCutting)
        {
            lpString[i] = ' ';
            --i;
        }
    
        lpString[i] = '\0';
    }
    


  • hmm ok verstehe

    char *x= (char*)calloc(10,sizeof(char));
    
    removeEnd(x,5);
    
    void removeEnd(char *&s,int n) 
    { 
      s= realloc(s,strlen(s)-n); 
    }
    

    wenn das so ausehen würde, würde ich dann nich 5 byte aufm heap freigeben, welcher später für andere gebraucht werden kann? Wenn ich das 5te elem auf \0 setze, sind trozdem noch die 10 bytes reserviert oder?



  • BitWax schrieb:

    void CutEndOfString (char *lpString, int iCharsToCut)
    {
        int iStringLength = strlen (lpString);
        if (iStringLength < iCharsToCut)
        {
            strcpy (lpString, "");
            return;
        }
    
        int iCutting = iStringLength - iCharsToCut;
    
        int i = iStringLength;
        while (i > iCutting)
        {
            lpString[i] = ' ';
            --i;
        }
    
        lpString[i] = '\0';
    }
    
    char *str = "hallo";
        CutEndOfString (str, 3);  // PENG  :warning:
    

    Auch schlecht 😞



  • @Boris: Ja, sind sie - aber in deiner Funktion kannst du nicht feststellen, ob der übergebene String auf dem Heap liegt oder nicht:

    char x[]="Hallo Welt";
    removeEnd(x,5);//BUMM
    

    @BitWix: Bei String-Literalen wird jeder Lösungsansatz scheitern 😉



  • @BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis



  • BorisDieKlinge schrieb:

    @BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis

    Hast du was gesagt? Ich habe nur ein heucheln aus der hinteren Reihe gehört...



  • BorisDieKlinge schrieb:

    @BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis

    Nicht so tragisch, dafür wird's bei dir nix mit dem Programmieren. Naja, vielleicht in 10 Jahren mal 😃



  • BorisDerSchlingel schrieb:

    BorisDieKlinge schrieb:

    @BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis

    Nicht so tragisch, dafür wird's bei dir nix mit dem Programmieren. Naja, vielleicht in 10 Jahren mal 😃

    😃



  • *meeeehhhhpppp" To many Loser exception!


Anmelden zum Antworten