String entleeren
lima-city → Forum → Programmiersprachen → C/C++ und D
anwendungsfall
befehl
dez
durchlauf
element
fragen
funktion
hintergrund
jahr
lngen
mark
null
pascal
schleifen
schwarz
string
taschenrechner
test
thw
variable
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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.
-
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 -
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?
-
F?r die Fehlersuche w?rs vllt. mal hilfreich wenn du deinen Code, oder wenigstens Teile davon postest.
;) -
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. -
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'; }
-
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 -
danke nochmal jetzt funktioniert es.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage