fgets Problem.
-
Hallo, am besten schildere ich zuerst mal, was ich bezwecken will und was ich für Probleme dabei habe. Also: Das Programm soll zuerst eine mehrstellige Zahl aus Informationen des Computers bilden. Das funktioniert soweit auch. Diese Zahl hat allerdings nicht bei jedem PC die selbe Länge. Als nächstes will ich dann aus einer .ini Datei, die voll mit Zahlenfolgen ist, diese durchsuchen, ob die aus dem PC ausgelesene Zahl dabei ist. Die .ini sieht in etwa so aus:
5464654564
32131561
548695154156416
213513213
32132Das Problem ist nun, dass das Auslesen und der daraufhin folgende string compare nicht funktionieren, wenn ich die größe des char array, in die ich aus der .ini auslese, einfach mal z.b. auf 256 setze. Es funktioniert nur, wenn das array auch so groß ist, wie die länge der Zahlen +1.
Dazu am besten mal mein Code.char cNumber[256]; sprintf(cNumber, "%d", Number); // cNumber ist das char array, was ich nachher zum strcmp benutze // Number ist die aus dem PC ausgelesene Zahl mit unterschiedlicher Länge char tmpINI[256]; bool bCheck = false; if (filePtr != NULL) { for (int i = 1; i <= 100; i++) { if (!bCheck) { fgets(tmpINI, 256, filePtr); if(strcmp(cNumber, tmpINI) == 0) { bCheck = true; std::cout << " Funktioniert " << std::endl; } if (i == 100 && !bVerified) { std::cout << " Hat nicht funktioniert " << std::endl; Sleep(2000); exit(1); } } } // file close etc //... }Wenn ich jetzt z.b. in tmpINI eine 10 Stellige Zahl einlese, tmpINI so definiere char tmpINI[11] und cNumber ein 10 char array ist, dann funktioniert es. Sobald die Größen aber unterschiedlich sind, funktioniert es nicht mehr.
Es wäre echt super, wenn mir jemand helfen könnte.
Danke schonmal
Gruß Michel
-
Sprache? Bis auf 2 Zeilen(20,26) ist das reines C. C++ und C mischen kommt nie gut, da brauchst du dich über Fehler nicht zu wundern.
Dein cNumber ist übrigens nicht nullterminiert, daher ist der Stringvergleich sowieso undefiniert. Mit C++ könnte man das mittels der Stringklasse trivial lösen, in C musst du lernen, wie das mit der Zeichenkettendarstellung genau funktioniert.