Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strtok_的安全调试警告解决方案 我有一段代码,它被DEV C++正确地编译了。当我尝试使用VS2012 express执行它时,我遇到了警告“警告C4996:”:此函数或变量可能不安全。考虑使用Stotokz代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助“”_C++_Visual Studio_Visual C++ - Fatal编程技术网

strtok_的安全调试警告解决方案 我有一段代码,它被DEV C++正确地编译了。当我尝试使用VS2012 express执行它时,我遇到了警告“警告C4996:”:此函数或变量可能不安全。考虑使用Stotokz代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助“”

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

我试图禁用安全警告,但我发现在我的VS express中没有可用的_CRT_SECURE_NO_warnings选项。所以我不得不修改我的代码,使用strtok_而不是strtok来避免这个警告。但是,即使代码执行到最后没有任何错误,也会出现一些错误,结果不会出现。显然没有读取文件发生。这是之前在devc上运行良好的代码++

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。谢谢