Strtok_s安全调试警告解决
strtok_s security debugging warnings solving
我有一段代码,已被Dev c++正确编译。当我试图使用VS2012 express执行它时,我面临这个警告"警告C4996:":此函数或变量可能不安全。考虑使用strtok_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅联机帮助"
我试图禁用安全警告,但我发现_CRT_SECURE_NO_WARNINGS选项在我的VS express中不可用。所以我不得不修改我的代码,使用strtok_s而不是strtok来避免这个警告。但是,即使代码执行到最后没有出现任何错误,也会出现一些错误导致结果不显示。显然没有读取文件。这是之前在Dev c++上运行良好的代码
const char* token[MAX_TOKENS_PER_LINE] = {}; // initialize to 0
// parse the line
token[0] = strtok(buf, DELIMITER); // first token
if (token[0]) // zero if line is blank
{
for (n = 1; n < MAX_TOKENS_PER_LINE; n++)
{
token[n] = strtok(0, DELIMITER); // subsequent tokens
if (!token[n]) break; // no more tokens
,这是我试图执行使用VS2012 express
const char* token[MAX_TOKENS_PER_LINE] = {}; // initialize to 0
char* next_token[MAX_TOKENS_PER_LINE] = {}; // initialize to 0
//char* next_token;
// parse the line
token[0] = strtok_s(buf, DELIMITER, &next_token[0]); // first token
if (token[0]) // zero if line is blank
{
for (n = 1; n < MAX_TOKENS_PER_LINE; n++)
{
token[n] = strtok_s(0, DELIMITER, &next_token[n]); // subsequent tokens
if (!token[n]) break; // no more tokens
第二个代码有什么问题?
这是因为对strtok_s
的下一次连续调用期望context
指针(strtok_s
的最后一个参数)由上次调用填充。
每次调用都使用不同的(未初始化的)指针,这意味着上下文丢失,或者更确切地说,它使用一个看似随机的指针作为上下文。
您应该使用取消注释的变量next_token
而不是数组。
相关文章:
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 实现C++状态机.如何解决Wpmf对流警告
- 如何解决C6386警告
- CPP-FFMPEG 如何解决已弃用的警告
- 我收到阻止我运行程序的警告,但不确定如何解决
- 来自 Boost 的 JSON 解析器的警告 C4512 的解决方法
- 仅限 Xcode 9 - 如何解决由类模板中的静态变量引起的 [-Wundefined-var-template] 警告
- 窄转换编译警告.如何解决它
- 如何解决此MISRA警告:C
- 如何解决这个符合MISRA C 的警告
- 如何使用 -std=C++11 解决 G++ 警告:“auto_ptr”已弃用
- 尝试解决链接器警告:默认库'MSVCRT'与使用其他库冲突
- 解决方案叮当警告-成员模板不明确
- TFS 2010 源代码管理下的 VS2010 解决方案保留C++项目时在打开时发出警告
- 签署 EXE 是否可以解决安全警告
- 如何解决此棉绒警告"Implicit binary conversion from int to unsigned int"
- 使用复合赋值运算符解决转换警告
- 如何解决在容器之间传输数据时可能出现的数据丢失警告
- Strtok_s安全调试警告解决