fopen geht nicht nach 2. wcscpy !!!
-
hinweis schrieb:
Prüf mal, ob in "str" das drin steht, was drin stehen soll (z.B. "test**.txt**").
das Problehm liegt nicht im str oder in irgendwas das nicht compilierbar ist
alles ist Richitg nur wenn der zweite wcscpy aufgerufen wird. Geht nacher
fopen in die error schleife rein ohne Fehlermeldung .

-
Du reservierst nicht genug Speicher. SysStringLen liefert dir die Länge ohne Nullterminierung, wcscpy hängt aber eine dran. Den Fehler machst du übrigens zweimal im gezeigten Code.
-
Hallo .
Ich habe das Problem glaube ich nicht deutlich besrieben

wenn ich wcscpy()auskomentire
//wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
funktioniert alles wunderbar ich kann fopen benuzen.
Wenn ich so lasse
wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
geht auch alles wunderbar nur
funktioniert fopen nicht mehr
-
miky03 schrieb:
Wenn ich so lasse
wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
geht auch alles wunderbar nur
funktioniert fopen nicht mehr
Du kopierst in deine Arrays mehr rein als reinpasst. Das erzeugt undefiniertes Verhalten, da kann alles passieren. Im ersten Fall passiert vielleicht nichts, im zweiten Fall schlägt der nachfolgende fopen-Aufruf fehl. Wenn du das nochmal so einbaust, wird vielleicht deine Festplatte formatiert.
Also, machs einfach richtig.
-
MFK schrieb:
miky03 schrieb:
Wenn ich so lasse
wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
geht auch alles wunderbar nur
funktioniert fopen nicht mehr
Du kopierst in deine Arrays mehr rein als reinpasst. Das erzeugt undefiniertes Verhalten, da kann alles passieren. Im ersten Fall passiert vielleicht nichts, im zweiten Fall schlägt der nachfolgende fopen-Aufruf fehl. Wenn du das nochmal so einbaust, wird vielleicht deine Festplatte formatiert.
Also, machs einfach richtig.
habe jetzt so probiert
size_t k = SysStringLen(sNotiz); dat1.Notiz=new wchar_t(k+1); wcscpy(dat1.Notiz,sNotiz);Hilft nicht aber trozdem danke

-
miky03 schrieb:
Hilft nicht aber trozdem danke

Möglicherweise hast du noch mehr solche Fehler in deinem Code. Jeder davon kann dieses Verhalten auslösen.
Dass du nach dem VariantClear noch auf den BSTR zugreifst, ist übrigens auch nicht sauber. Der BSTR ist im Prinzip nur ein Zeiger, das V_BSTR-Makro fertigt auch keine Kopie an, d.h. dein Zeiger zeigt nur auf den Speicher, der dem VARIANT "gehört". Wenn du dem Zeiger den Variant unter dem Hintern weglöschst, wird er ungültig.
-
miky03 schrieb:
MFK schrieb:
miky03 schrieb:
Wenn ich so lasse
wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
geht auch alles wunderbar nur
funktioniert fopen nicht mehr
Du kopierst in deine Arrays mehr rein als reinpasst. Das erzeugt undefiniertes Verhalten, da kann alles passieren. Im ersten Fall passiert vielleicht nichts, im zweiten Fall schlägt der nachfolgende fopen-Aufruf fehl. Wenn du das nochmal so einbaust, wird vielleicht deine Festplatte formatiert.
Also, machs einfach richtig.
habe jetzt so probiert
size_t k = SysStringLen(sNotiz); dat1.Notiz=new wchar_t(k+1); wcscpy(dat1.Notiz,sNotiz);Hilft nicht aber trozdem danke

Ersetz einfach mal die runden Klammern durch eckige.
// dat1.Notiz=new wchar_t(k+1); dat1.Notiz=new wchar_t[k+1];Manche Compiler mögen eckige Klammern einfach lieber, vielleicht geht's dann. Hab mal gehört dass eckige Klammern manchmal auch ne andere Bedeutung haben als runde...
Aber ich glaub das is dummes Geschwätz, da muss man nix drauf geben.
-
hustbaer schrieb:
Hab mal gehört dass eckige Klammern manchmal auch ne andere Bedeutung haben als runde...
Dass ich das nicht gesehen habe... Ich geh ins Bett. :p
-
Wobei deine Einwände ja auch richtig sind. Er muss alle drei Sachen korrigieren, wenn er möchte dass das Programm zuverlässig läuft.
-
hustbaer schrieb:
miky03 schrieb:
MFK schrieb:
miky03 schrieb:
Wenn ich so lasse
wcscpy(dat1.Notiz,sNotiz); //Hier problem mit wcscpy!!!!!
geht auch alles wunderbar nur
funktioniert fopen nicht mehr
Du kopierst in deine Arrays mehr rein als reinpasst. Das erzeugt undefiniertes Verhalten, da kann alles passieren. Im ersten Fall passiert vielleicht nichts, im zweiten Fall schlägt der nachfolgende fopen-Aufruf fehl. Wenn du das nochmal so einbaust, wird vielleicht deine Festplatte formatiert.
Also, machs einfach richtig.
habe jetzt so probiert
size_t k = SysStringLen(sNotiz); dat1.Notiz=new wchar_t(k+1); wcscpy(dat1.Notiz,sNotiz);Hilft nicht aber trozdem danke

Ersetz einfach mal die runden Klammern durch eckige.
// dat1.Notiz=new wchar_t(k+1); dat1.Notiz=new wchar_t[k+1];Manche Compiler mögen eckige Klammern einfach lieber, vielleicht geht's dann. Hab mal gehört dass eckige Klammern manchmal auch ne andere Bedeutung haben als runde...
Aber ich glaub das is dummes Geschwätz, da muss man nix drauf geben.Danke an Alle supper Support hier

das Problem lag in [] und k+1
hier der korigierter Code//---Notiz VARIANT vValue8; VariantInit(&vValue8); variables[8]->GetValue(&vValue8); BSTR sNotiz = V_BSTR(&vValue8); size_t k = SysStringLen(sNotiz); dat1.Notiz=new wchar_t[k+1]; wcscpy(dat1.Notiz,sNotiz); SysFreeString(sNotiz); VariantClear(&vValue8); //------------------------------open File codefile = fopen(str,"a+"); if (codefile == NULL) { printf("codefile-error at file %s\n", "test.txt"); exit(1); }Nochmal vielen Dank

-
Registrierter Troll schrieb:
Du legst Speicherplatz für ein einziges Zeichen an und willst da ganze Zeichenketten reinkopieren.
Das war offensichtlich zu subtil.
hustbaer schrieb:
Hab mal gehört dass eckige Klammern manchmal auch ne andere Bedeutung haben als runde...
Aber ich glaub das is dummes Geschwätz, da muss man nix drauf geben.So kann mans natürlich auch sagen.