Frage zum Code
-
Hi, ich habe diesen Code:
#include <stdio.h> void main() { char satz[100]; int x = 0; printf("Gebe einen Satz ein: "); gets(satz); printf("\n\n"); while ((satz[x] != '\0') || (x == 100)) { if(satz[x] == 'r') { satz[x] = 'l'; } if(satz[x] == 'R') { satz[x] = 'L'; } x++; } puts(satz); getchar(); }
und frage mich wieso denn da (x == 100) stehen muss, damit die Schleife richtig läuft??
Müsste es nicht eigentlich (x != 100) sein??Liebe Grüße Ania
-
Ich nehme mal an, dass du mit || (x == 100) die Schleife verlassen willst, wenn sie am Ende des Buffers "satz" ist. Das ist erstens falsch umgesetzt und zweitens in diesem Fall auch herzlich irrelevant, da du mit gets() bereits eine böse Funktion einsetzt, die bei der Eingabe nicht überprüft ob überhaupt noch genügend Speicherplatz in satz vorhanden ist.
Nimm liber fgets(), das lässt nur die Eingabe von n-1 Zeichen zu (das letzte Zeichen im Array ist ja die '\0'). Beispiel:
fgets(satz,100,stdin);
Die Überprüfung auf '\0' in der Schleife reicht vollkommen aus, da der String definitiv nicht über die Grenzen von satz hinausgehen kann und _immer_ nullterminiert ist.
-
genau genommen müßte es
&& (x!=100)
heißen
-
und
int main()...
sollte es auch