_s...
-
Hallo erstmal,
habe folgendes problem:
nachdem ich jetzt auf visual studio 2013 upgegraded habe, kommt eine fehlermeldung:
'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
zu folgendem quellcode:
//
#include "stdafx.h"
#include "stdio.h"
#include <iostream>
#include "stdlib.h"
#include <string.h>#define Max_Zeichen 200
#define Min_Zeichen 20void main()
{
char cZeichenkette[Max_Zeichen];
system("color 1E");
printf_s("Los geht es!");
getchar();
FILE * file = 0;
file = fopen("beispiel.txt", "w");
printf_s(" Geben sie den Text ein: ");
scanf_s("%s", &cZeichenkette, Max_Zeichen); fflush(stdin);
fprintf_s(file, "cZeichenkette");
fclose(file);
getchar();
}wenn ich jetzt ein _s zu fopen anfüge, nimmt er mir das = sowie "beispiel.txt" nichtmehr ab...
kann mir einer sagen wie ich das Problem lösen kann, bitte auch mit erklärung warum das so ist..
achso, zum programm selber: es soll simple sein, Textdatei erstellen, etwas reinschreiben lassen und dann wieder schließen.
Mfg
The_Freak
-
Also zunächst mal sind das keine Fehlermeldungen, sondern nur Warnings. Deswegen steht auch dabei: "To disable deprecation, use _CRT_SECURE_NO_WARNINGS". Da ich nicht davon ausgehe dass du professioneller Softi bist und dir mehr oder weniger versuchst was aus C zusammen zu knaupen, ignorier die Warnings einfach.
Sollte dich das immer noch stören, schreibs wie vorgesehen in C++ oder lern C#, da gibts keinen unsafed Code mehr...Darüberhinaus gehört das hier nicht ins MFC-Forum -.-
-
Stutzpeter schrieb:
Also zunächst mal sind das keine Fehlermeldungen, sondern nur Warnings. Deswegen steht auch dabei: "To disable deprecation, use _CRT_SECURE_NO_WARNINGS". Da ich nicht davon ausgehe dass du professioneller Softi bist und dir mehr oder weniger versuchst was aus C zusammen zu knaupen, ignorier die Warnings einfach.
Sollte dich das immer noch stören, schreibs wie vorgesehen in C++ oder lern C#, da gibts keinen unsafed Code mehr...Darüberhinaus gehört das hier nicht ins MFC-Forum -.-
Naja, bin erstsemestler im infostudium;
Es ist kein warning, sondern ein error, sonst wär ich nicht hier - sollang es das ausgibt was ich schreib bin ich zufrieden, tut es aber nicht..
Ausserdem weiss ich nichtmal was mfc bedeutet, dachte es hätte mit dem programm an sich was zu tun, weniger mit dem quelltext..
Ich weiss nicht wie ich "_ctr..._Warnings" einsetze, ich frag hier um was zu lernen, nicht um hochnäsige kommentare zu bekommen.. Wenn du kein bock hast mir zu helfen, wärs mir lieber wenn du gar nichts schreibst..Und noch was, es kommt um einigest freundlicher jmd zu sagen "deine frage gehört in das ... Forum" anstelle nur zu sagen "das gehört nicht ins mfc forum -.-"
-
Meine Unhöflichkeit mal außer Acht gelassen: es IST eine Warning! Wenn du den Code so lässt wie er ursprünglich war funktioniert er genau so wie er soll.
fprintf_s(file, "cZeichenkette");
Dir ist aber klar, dass an der Stelle immer cZeichenkette in deinem Textfile steht?
-
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Das ist doch ein Error? Es funktioniert bei mir nicht.. sonst würde ich es hier nicht melden.. bzw. nachfragen..
ja, ich konnte es noch nicht ausprobieren, bin mit dem file open usw. erst noch am lernen..muss ich es dann als array ausgeben, oder? (wobei das jetzt nicht das problem wäre, bin schon froh wenn er irg. etwas ausgeben würde)
-
Stutzpeter schrieb:
Meine Unhöflichkeit mal außer Acht gelassen: es IST eine Warning! Wenn du den Code so lässt wie er ursprünglich war funktioniert er genau so wie er soll.
Ich verwende VS2013 nicht, aber Google sagt, das "Security Development Lifecycle Checks" bei VS2013 per default eingeschaltet sein könnten.
Es heist weiter "It turns some warnings into errors".Ich würde also nicht ausschliessen, das es neuerdings als Fehler gemeldet wird.
Und natürlich kann man mal nett fragen welche Programmiersprache das denn eigentlich werden soll ...
Offensichlich weiss der Fragesteller grundlegende Dinge nicht.
#include <stdio.h> #include <stdlib.h> #include <string.h> // #include <iostream>
Wenn es C sein soll gehört es ins C-Forum und nicht ins C++/MFC Forum und natürlich gehört in den Quelltext dann auch kein <iostream>.
Zudem sollten Includes, die zum Compiler gehören in spitzen Klammern stehen.
Um das nun zu kompilieren könnte man der Meldung nach _CRT_SECURE_NO_WARNINGS definieren und/oder die SDL checks abschalten.
-
Die Definition habe ich schon versucht, hat nichts gebracht.
Gibt es grundlegende Unterschiede zw. "" und <>?
Wir haben in der Hochschule mit C angefangen und gehen jetzt immer weiter über auf c++ mit Klassenanwendung usw.
Deshalb das durcheinander, ich versteh eh sehr viel zeug noch nicht so richtig.. deshalb versuch ich mich jetzt in den Semesterferien mehr damit auseinander zu setzen.. hoffe das gelingt
an sich wurde da problem schon gelöst fopen_s(&file, "beispiel.txt", "w"); funktioniert...
aber insgesamt geht es irg. wie trotzdem noch nicht so ganz, will über einen string ein Wort oder auch Satz in die Datei einlesen..[code="cpp"]
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>#define _CRT_SECURE_NO_WARNINGS
#define Max_Zeichen 200
#define Min_Zeichen 20using namespace std;
void main()
{
char cZeichenkette[Max_Zeichen], cZeichenkette2[Max_Zeichen];
system("color 1E");
FILE * file = 0;
printf_s("Geben sie den Text ein: "); // Texteingabe welche in .txt gespeichert werden soll
scanf_s("%s", &cZeichenkette, "[Max_Zeichen]"); fflush(stdin);
fopen_s(&file, "beispiel.txt", "w"); // Erstellen einer Textdatei "beispiel.txt"
fprintf_s(file, "%s", cZeichenkette[Max_Zeichen]); // Eingegebener text wird in die .txt geschrieben
fclose(file); // .txt wird geschlossen und gespeichertcout << "Das File wurde geschlossen und wird ";
cout << "jetzt wieder geoeffnet und gelesen ";
getchar();fopen_s(&file, "beispiel.txt", "r"); // Wiederholtes öffnen der .txt
fscanf_s(file, "%s", cZeichenkette2, "[Max_Zeichen]"); // Übergeben des textes in den String
fflush(stdin);
printf_s("Ihr vorher eingegebener text: %s", cZeichenkette2[Max_Zeichen]);
fclose(file);
getchar();
}für weiter Tipps wäre ich dankbar..
-
ohne jetzt ein langes Beispiel zu schreiben geb ich dir einfach einen Link zur MSDN und da findest du auf der seite weiter unten ein Beispiel wie du mit fread Daten lesen kannst und mit fwrite daten schreiben kannst.
https://msdn.microsoft.com/de-de/library/kt0etdcs.aspx
Sollte dir eigentlich weiter helfen.
-
CTecS schrieb:
Sollte dir eigentlich weiter helfen.
dankeschön
kann man hier auch Fragen als gelöst eintragen?
wär cool wenn mir das noch jemand sagen würde..
-
merano schrieb:
Ich verwende VS2013 nicht, aber Google sagt, das "Security Development Lifecycle Checks" bei VS2013 per default eingeschaltet sein könnten.
Es heist weiter "It turns some warnings into errors".Ich würde also nicht ausschliessen, das es neuerdings als Fehler gemeldet wird.
ja, seit, ich glaub VS2012 oder vllt. auch erst seit VS2013 werden die _s warnings als errors ausgegeben, was nicht nur mich sondern auch meinen Prof stört
-
The-_-Freak schrieb:
...aber insgesamt geht es irg. wie trotzdem noch nicht so ganz, will über einen string ein Wort oder auch Satz in die Datei einlesen..
Was soll "irg. wie trotzdem noch nicht" bedeuten, sollen wir raten ?
Obwohl, es ist soviel im Argen ...
Z.B.:
void main() gibts nicht, muss int main() heissen
fflush(stdin) ist nicht definiert
Bei scanf_s() stürzt es nach Eingabe bei mir dann ab.
Scanf() mit "%s" ist ohnehin so keine gute Idee, da die eingegebene
Stringlänge nicht begrenzt wird.Da Du dich ja nun für C++ entschieden hast schreib auch richtigen
C++ Code und lass den ANSI-C Kram ganz weg.
Das könnte z.B. so anfangen:
// #include <stdafx.h> #include <iostream> #include <string> #include <fstream> using namespace std; int main() { string cZeichenkette, cZeichenkette2; system("color 1E"); cout << "Geben sie den Text ein [Max_Zeichen]: " << endl; // Texteingabe welche in .txt gespeichert werden soll getline(cin, cZeichenkette); ofstream myfile; myfile.open ("beispiel.txt"); // Erstellen einer Textdatei "beispiel.txt" myfile << cZeichenkette << endl; // Eingegebener text wird in die .txt geschrieben myfile.close(); // .txt wird geschlossen und gespeichert cout << "Das File wurde geschlossen und wird" << "jetzt wieder geoeffnet und gelesen" << endl;