String liefert Müll
-
Hi @ all,
ich habe ein Frage:
ich habe mir einen String deklariert und will den ganz billig mit einem Inhalt füllen.
char search[MAXLENGTH] printf("Search for Signal: %s", search); scanf("%s",search); if(strcmp(search,signal)==0) { printf("Signal %s in Line %d\n",signal ,nline); }
warum steht so immer irgendein Schrott in dem String drin?
Ich habe dem String schon einen vordefinierten wert gegeben, dann steht der wert am anfang drin und nach einem durchgang steht der schrott wieder an der stelle.
wieso? *help*
-
Der String wird am Anfang nicht initialisiert, also hast du dort das drin, was zufällig dort im Speicher stand. Aber normalerweise müsste spätestens nach dem scanf()-Aufruf etwas sinnvolles im String stehen.
-
ja das weiss ich schon!!!!
aber wie krieg ich den schrott am anfang gleich raus??
wenn ich einfach dem string einen inhalt gebe, dann steht ja der inhalt anstatt der schrott da ...
es soll ja einfach nix dastehen.das gleiche problem habe ich bei einem int wert, da macht er genau das gleiche!
-
Ganz einfach... bei einem int machst du es so:
int var=0;
Bei einem Array nimmst du dann eben eine Schleife
char array[x]; for (int i=0;i<x;i++)array[i]=0;
bzw. einfacher mit ZeroMemory().
-
ja auf das int var = 0; bin ich auch gekommen, aber dann steht automatisch 0 in meiner variable. das kann ich ja nicht gebrauchen.
int menu; printf("(1) Convert + Map Pattern \n(2) Map Pattern\nSelect: %i",menu); scanf("%i",menu); .......
wenn da jetzt in der variablen menu eine 0 steht, ist die ganze abfrage unbrauchbar!
-
manu1984 schrieb:
wenn da jetzt in der variablen menu eine 0 steht, ist die ganze abfrage unbrauchbar!
Ich verstehe nicht, was das überhaupt soll. Warum gibst du menu aus?
-
also:
ich will eine abfrage machen. je nachdem ob man für menu 1 oder 2 eintippt, soll er einfach was anderes machen.das ist die einzige möglichkeit, die ich kenne.
ich hab das jetzt mit einem string deklariert. so geht es, aber das ist doch total umständlich, wenn man auch einen int wert nehmen kann.
char menu[1]; printf("(1) Convert + Map Pattern \n(2) Map Pattern\nSelect: %s",menu); scanf("%s", menu); if(strcmp(menu,"1")==0) { convert_pat(argc, argv); mapping_pat(argc, argv); } else if(strcmp(menu,"2")==0) { mapping(argc, argv); }
-
manu1984 schrieb:
es soll ja einfach nix dastehen.
"nix" geht nicht - du hast den Speicherplatz reserviert, also wird dort auch irgendwas drinstehen. Allerdings zwingt dich niemand, etwas mit dem Inhalt der Variablen zu machen, wenn du sie nicht brauchst (d.h. der scanf()-Aufruf füllt die Variable mit irgendeinem sinnvollen Wert - was vorher drin stand, ist für den weiteren Verlauf egal).
-
manu1984 schrieb:
ich will eine abfrage machen. je nachdem ob man für menu 1 oder 2 eintippt, soll er einfach was anderes machen.
das ist die einzige möglichkeit, die ich kenne.
Dafür brauchst du die Variable aber nicht vorher auszugeben. Entferne menu und das %i aus dem printf-Aufruf und fertig.
-
ja das ist mir schon klar,
aber das problem ist in der ausgabe:da steht dann:
(1) Convert + Map Pattern
(2) Map Pattern
Select: 0_ <- hier steht dann die variableund hinter dem 0 geb ich dann meine variable (1 oder 2 ) ein und dann bekomme ich natürlich nen error.
und bei meinem char hab ich ja das gleiche problem. da steht dann auch lauter schrott drin, der nicht weggeht.
-
ja natürlich ... ich idiot!!!!
das ist das problem!!!
danke!!!!
-
manu1984 schrieb:
ja auf das int var = 0; bin ich auch gekommen, aber dann steht automatisch 0 in meiner variable. das kann ich ja nicht gebrauchen.
Mmmhh!? Und wie wär's dann mit int var = 42; Paßt das besser?
Im Ernst: Irgendwas muß doch in einem int stehen: Nix gibt's nicht.
Außerdem mußt du eine Zahl einlesen mit
scanf("%d", &menu);