Microsofts "sicherere" Funktionen
-
Hallo!
Ich wollte eine als sicherer (von Microsoft) eingestufte Funktion "_strlwr_s", das Gegenstück zu "_strlwr", nutzen, doch leider stürtzt mir die Applikation dann ab. MSDN Link
Ich bekomme (Debug Mode) immer eine Ausnahme geworfen.
Expression:(L"String is not null terminated" && 0)Das ist aber falsch. Der String ist sehr wohl null terminiert. Die alte Funktion "_strlwr" funktioniert einwandfrei.
Hier zum Ausprobieren. Dieser Code stürtzt.
#include <iostream> int main(int argc, char **argv) { char p[] = "Hallo"; _strlwr_s(p, strlen(p)); return 0; }Vorraussetzungen: Visual C++ 2005 Express Edition oder Visual Studio 2005
Win32 Konsolenanwendung
-
strlen(p) + 1
-
ratefuchs schrieb:
strlen(p) + 1
Sehr gut. Danke. Eigentlich war ich der Meinung das ich das schon ausprobiert hatte.
In der MSDN steht es aber nicht explizit drin. Nur aus dem Beispiel kann man es entnehmen.
Hast Du es ausprobiert oder wusstest du es?
-
Das kann man doch aus der Fehlermeldung erkennen. strlen gibt die Stringlänge ohne die \0 zurück. Also kann _strlwr_s die Null-Terminierung auch nicht sehen.
-
In deinem Fall sollte es auch mit sizeof(p) gehen.
-
char p[] = "Hallo";ist das nullterminiert?
ich dachte immerchar p[] = "Hallo\0";das ist nullterminiert.
-
DEvent schrieb:
char p[] = "Hallo";ist das nullterminiert?
Jup.
-
HumeSikkins schrieb:
DEvent schrieb:
char p[] = "Hallo";ist das nullterminiert?
Jup.
ok
hab seit ich std entdeckt habe aufgehört solche "nackten" strings zu benutzen
-
Du verwendest jetzt Strings ohne Hochkomma? Der Knackpunkt ist nicht das char[] sondern "DerHierIstNullTerminiert"

MfG SideWinder
-
nein das ist automatisch nullterminiert, also:
char str[] = {'h', a', 'l', 'l', 'o', '\0'}; //oder so char str2[] ="hallo";
-
SideWinder schrieb:
Du verwendest jetzt Strings ohne Hochkomma? Der Knackpunkt ist nicht das char[] sondern "DerHierIstNullTerminiert"

MfG SideWinder
nein der Knackpunkt ist hier die Funktion "_strlwr_s"
