Problem mit Strings



  • 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