我有一段代码正确地由Dev C ++编译。当我尝试使用VS2012 express执行它时,我遇到了这个警告''警告C4996:'':这个函数或变量可能不安全。考虑使用strtok_s代替。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助''
我尝试禁用安全警告,但我发现我的VS express中没有_CRT_SECURE_NO_WARNINGS选项。所以我不得不修改我的代码使用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
第二个代码出了什么问题?
答案 0 :(得分:1)
这是因为下一次对strtok_s
的连续调用需要context
指针(strtok_s
的最后一个参数)在最后一次调用时填写。
每次调用都使用不同的(未初始化的)指针,这意味着上下文丢失,或者说它使用看似随机的指针作为上下文。
您应该使用outcommented变量next_token
而不是数组。