Der Compiler empfehlen nur die Funktionen Safer CRT, und es gibt Ihnen auch Anweisungen für die Warnungen ausschalten, wenn Sie wirklich die ursprüngliche strtok
Funktion verwenden mögen:
warning C4996: 'strtok': This function or variable may be unsafe. Consider
using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNING
Nur hinzufügen _CRT_SECURE_NO_WARNING
als Preprocessor in den Projekteinstellungen definieren oder auf der Oberseite Ihrer stdafx.h Datei hinzufügen #define _CRT_SECURE_NO_WARNING 1
Siehe Security Features in the CRT
Sie sind eindeutig sehr neu in C/C++, Sie brauchen sich also noch keine Gedanken um dieses Detail zu machen. Der Grund für diese Warnung liegt darin, dass viele lange C-String-Bibliotheksfunktionen, die auf Kernighan & Ritchie's original language zurückgehen, einige inhärente Sicherheitsprobleme in der modernen Welt der Malware aufweisen. Daher sollte jede Produktionsanwendung die Bevorzugung der "Safer CRT" -Versionen vermeiden.
Insbesondere strtok
funktioniert mit internen versteckten Zustand in der Bibliothek, die manchmal ausgenutzt werden können, um Sicherheitsprobleme in Parsern zu erstellen. anstelle der versteckten internen Variable
char *strtok(char *str, const char *delim);
Die strtok_s
Funktion nimmt einfach eine explizite Kontextvariable für den Staat zu verwenden. Es funktioniert genauso wie strtok
in allen anderen Arten.
char *strtok_s(char *strToken, const char *strDelimit, char **context);
Daher Code tun würde genau das gleiche wie Ihr Buch Probe wie folgt:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char the_string[81], *p;
char *next_token = nullptr;
cout << "Input a string to parse: ";
cin.getline(the_string, 81);
p = strtok_s(the_string, ", ", &next_token);
while (p != nullptr) {
cout << p << endl;
p = strtok_s(nullptr, ", ", &next_token);
}
return 0;
}
Weitere Informationen und Geschichte auf der sicheren Nutzung des CRT finden Security Development Lifecycle (SDL) Banned Function Calls
Bitte lesen Sie [die Dokumentation] (https://msdn.microsoft.com/en-us/library/ftsafwz3.aspx) für die Funktion 'strtok_s' und beheben Sie Ihren Code gemäß der Dokumentation. Sie übergeben nicht alle erforderlichen Argumente an die Funktion. – Jens
Wissen Sie, wie Sie die Dokumente nachschlagen können? Ich benutze den Google-Suchbegriff 'site: msdn.microsoft.com strtok_s' und komme zu ['strtok_s()'] (https://msdn.microsoft.com/en-us/library/ftsafwz3.aspx) für VS 2015. Die Beobachtung in Ihrem Fragetitel ist richtig: 'strtok_s()' nimmt nicht zwei Argumente (obwohl '' strtok() '' 'tut - aber es gibt gute Gründe,' strtok() 'nicht zu verwenden). –
Ich benutze strtok(), aber es dosent mir das Programm laufen lassen seine sagt es sicherer strtok_s() zu verwenden – zezhawk22