kostenloser Webspace werbefrei: lima-city


String entleeren

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    hugo1990

    hugo1990 hat kostenlosen Webspace.

    Ich steh vor einem gro?en Problem. Und zwar programmiere ich schon seit Jahren mit Pascal und jetzt habe ich ein Programm gefunden, mit dem ich Programme f?r meinen Grafikf?higen Taschenrechen schreiben kann. Das ist aber leider in C.
    Nun zu meiner Frage wie kann ich einen String(Charkette) entleeren.
    Ich hatte es so wie in Pascal probiert:
    s:=''; (Pascal)
    s=""; (umgeschrieben in C)
    Nur das scheint nicht zu funktionieren. Gibt es da einen Befehl daf?r.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Bin mir nicht sicher, aber vielleicht so:

    s[0]='\0';


    Anders als bei Pascal, wo die l?nge des Strings im ersten Element gespeichert wird, beginnt in C der String wirklich bei [0]. Um zu wissen wo der String zu Ende ist muss das Ende sozusagen markiert werden. Dies geschieht mit dem Nullbyte: 0000 0000 und wird im Programm so geschrieben: '\0'.

    Ein String in C sieht also z. B. so aus: " T E S T \0 " wenn du nun das erste Zeichen ersetzt wird daraus: " \0 E S T \0 ". Das erste Zeichen ist also schon der Ende des Strings.

    Ich hoffe, das war halbwegs verst?ndlich.
  4. Autor dieses Themas

    hugo1990

    hugo1990 hat kostenlosen Webspace.

    das ist ja schon und gut mit dem ersten glied ?berschreiben, aber deshalb ist der String trotzdem noch nicht leer. wenn ich das "\0" Glied ?berschreibe sehe ich dann die anderen zeichen wieder.
  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Ich weiss ja jetzt nicht genau was dein Taschenrechner alles kann, aber wenn der die funktion strlen zum ermitteln der L?nge eines Strings kennt k?nnte es so gehen:

    int i;
    char s[]="TEST";
    
    for(i=0;i<strlen(s);++i)    //solange i kleiner der Stringl?nge ist wird i erh?ht
    {
      s[i]='\0';
    }


    Es wird jedes Zeichen des Strings durch \0 ersetzt.
    Aus " T E S T \0 " wird so nach durchlaufen der for-Schleife: " \0 \0 \0 \0 \0 ".

    Auch mal den Link anschauen:
    http://www.netzmafia.de/skripten/ad/ad7.html#4.9



    Beitrag ge?ndert: 28.9.2006 17:47:02 von kochmarkus
  6. Autor dieses Themas

    hugo1990

    hugo1990 hat kostenlosen Webspace.

    naja so schlau war ich ja auch schon, aber der macht das nicht. ich wei? nicht warum. wenn ich in den string ein neues zeichen hinzuf?ge geht das ja, aber sowie ein zeites hinzukommt steht der ganze alte string wieder da. wo k?nnte da der fehler liegen?
  7. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    :confused:
    F?r die Fehlersuche w?rs vllt. mal hilfreich wenn du deinen Code, oder wenigstens Teile davon postest.
    ;)
  8. Autor dieses Themas

    hugo1990

    hugo1990 hat kostenlosen Webspace.

    while ((key=ngetchx ()) != KEY_ESC)
     {
     if (key!= KEY_UP && key!= KEY_DOWN && key!= KEY_ENTER)
      {
      if(mark==1) 
       {
       for(i1=0;i1<strlen(dez);++i1)
        {
        dez[i1]='\0';
        }
       }
      if(mark==0) i=strlen(dez);
      if (key >= '0' && key <= '9' && i < maxlen)
       {
       dez[i++] = key;
       }
      else if (key == KEY_BACKSPACE && i)
       {
       i--;
       dez[i]=0;
       }
      mark=0;
      }
     }

    mark variable daf?r zust?ndig, das der Text sp?ter einmal normal und ein umgekehrt(Text wei?, Hintergrund schwarz) dargestellt wird.
  9. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Stimmt ich sollte erst denken und dann schreiben.
    Die for-Schleife wird in jedem Fall nur einmal durchlaufen, weil nach dem ersten Durchlauf ist das erste Zeichen des Strings ja \0 und somit die Stringl?nge null, womit die Bedingungen i1 < strlen(dez) nicht mehr erf?llt ist.
    Die L?nge des Strings muss also vorher in einer int Variable gespeichter werden.

    laenge=strlen(dez);
    for(i1=0;i1<laenge;++i1)
    {
     dez[i1]='\0';
    }
  10. Ich wei? nicht ob der Taschenrechner das kann, aber f?r genau deinen Anwendungsfall gibt's im ANSI C die Funktion memset:

    void* memset(void* pBase, int FillChar, size_t n);

    Sie f?llt den angegebenen Speicherbereich (pBase) mit einer bestimmten Anzahl (n) Zeichen (FillChar).

    MfG,
    thw
  11. Autor dieses Themas

    hugo1990

    hugo1990 hat kostenlosen Webspace.

    danke nochmal jetzt funktioniert es.
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!