warum stürzt es bei strcat ab ?
-
Hallo ich bin neu hier und versuche mich gerade in c
ich lese zuerst das systemverzeichnis aus und will dann in einer Unterfunktion etwas anhängen, aber bei dem zweiten strcat stürzt es abwenn ich die Größe SysDir auf 41 erhöhe geht es fehlerfrei, darunter nicht.
wieso ?#include <stdio.h> #include <windows.h> void GetInfo(char bla1[60], char bla2[15]); int main() { char SysDir[30]; GetSystemDirectory(SysDir, sizeof(SysDir)); GetInfo(SysDir, "blablablabla"); return 0; } void GetInfo(char bla1[60], char bla2[15]) { strcat(bla1, "\\userdata\\temp\\"); strcat(bla1, bla2); //add exe printf("systeminfo: %s\n", bla1); }
-
Schätze mal Du versuchst mit strcat einfach zuviel in SysDir zu schieben! Das gibt nen Überlauf und deshalb knetert Dein Programm ab!
Mach mal zwischendrin 'ne Abfrage mit
printf("Länge von SysDir: %d Zeichen", strlen(SysDir));
strlen zeigt Dir die Anzahl der Zeichen in SysDir an... und Du hast nur Platz für 30 bereitgestellt!
[ Dieser Beitrag wurde am 24.03.2003 um 21:37 Uhr von Hepi editiert. ]
-
das gibt mir 17 zurück, also genug platz eigentlich
trotzdem danke schonmal
-
An welcher Stelle gibt er Dir 17 zurück?
Bevor Dustrcat(bla1, bla2); //add exe
machst oder hinterher?
-
vor dem ersten strcat, danach ist es natürlich 17 + anzahl des hinzugefügten
-
hi
schau dir den strcat nochmal an
zuerst strcpy, dann strcat
void GetInfo(char bla1[60], char bla2[15]) { strcpy(bla1, "\\userdata\\temp\\"); strcat(bla1, bla2); //add exe printf("systeminfo: %s\n", bla1); }
-
danke
und wieso ?
-
ich denk strcat war schon richtig. Aber 30 Zeichen für den Buffer ist wahrscheinlich zu klein.
-
Vor dem ersten strcat, soso....
Erkennst Du das Problem von selber?
17 Zeichen plus "\\userdata\\temp\"(=15 Zeichen) plus "blablabla" (=9 Zeichen) ergibt was?
RICHTIG, 41 Zeichen!
Wieviel Platz hast Du reserviert? 30? Bei wieviel Zeichen geht's? 41? Noch Fragen?
-
stimmt, bashar, da wird wohl schon vorher was reingetan, habe ich ignoriert
wird ein überschritten sein der buffer
-
ne aber das wird doch in bla1 gespeichert und der hat doch 60
oder seh ich das falsch
-
Du siehst es falsch!
Du übergibst doch der Funktion
GetInfo(SysDir, "blablablabla");
die Variable SysDir, und die hat nunmal nur Platz für 30 Zeichen!