strtok_的安全调试警告解决方案 我有一段代码,它被DEV C++正确地编译了。当我尝试使用VS2012 express执行它时,我遇到了警告“警告C4996:”:此函数或变量可能不安全。考虑使用Stotokz代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助“”
我试图禁用安全警告,但我发现在我的VS express中没有可用的_CRT_SECURE_NO_warnings选项。所以我不得不修改我的代码,使用strtok_而不是strtok来避免这个警告。但是,即使代码执行到最后没有任何错误,也会出现一些错误,结果不会出现。显然没有读取文件发生。这是之前在devc上运行良好的代码++strtok_的安全调试警告解决方案 我有一段代码,它被DEV C++正确地编译了。当我尝试使用VS2012 express执行它时,我遇到了警告“警告C4996:”:此函数或变量可能不安全。考虑使用Stotokz代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助“”,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,我试图禁用安全警告,但我发现在我的VS express中没有可用的_CRT_SECURE_NO_warnings选项。所以我不得不修改我的代码,使用strtok_而不是strtok来避免这个警告。但是,即使代码执行到最后没有任何错误,也会出现一些错误,结果不会出现。显然没有读取文件发生。这是之前在devc上运行良好的代码++ const char* token[MAX_TOKENS_PER_LINE] = {}; // initialize to 0 // parse the line
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
const char*token[MAX_TOKENS_PER_LINE]={};//初始化为0
//解析行
标记[0]=strtok(buf,分隔符);//第一代币
if(标记[0])//如果行为空,则为零
{
对于(n=1;n
这就是我试图使用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
const char*token[MAX_TOKENS_PER_LINE]={};//初始化为0
char*next_token[MAX_TOKENS_PER_LINE]={};//初始化为0
//char*next_令牌;
//解析行
令牌[0]=strtok_s(buf、分隔符和next_令牌[0]);//第一个令牌
if(标记[0])//如果行为空,则为零
{
对于(n=1;n
第二个代码有什么问题?这是因为对
strtok_s
的下一个连续调用需要上一个调用填充上下文
指针(指向strtok_s
的最后一个参数)
每次调用都使用不同的(未初始化的)指针,这意味着上下文丢失,或者更确切地说,它使用看似随机的指针作为上下文
您应该使用outcommented变量
next\u token
而不是数组。\u CRT\u SECURE\u NO\u WARNINGS
当然是可用的。您只需知道它是一个宏,必须在包含第一个Microsoft头之前定义它。在任何Visual Studio版本中都没有很好的复选框。我确实使用了outcommented变量next_令牌,工作正常。我发现的另一个选择是将SDL check设置为off。谢谢