为什么第一次使用后 strtok_s return 0x00000001?
Why does strtok_s return 0x00000001 after first use?
我在使用 strtok_s
时遇到了一些问题。在下面的代码中,read_data
包含字符串:
BEGIN_TRANSACTION CHANGE_0 PUT(debit_account,dbvalue.new)PUT(debit_account,dbvalue.new) CHANGE_0 PUT(credit_account,crvalue.new)PUT(credit_account,crvalue.new) OUTCOME_COMMITTED_0 END_TRANSACTION_0
下面是我的代码:
char *delim = " ";
char* next_token;
line[0] = strtok_s(read_data, delim, &next_token);
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL)
{
i++;
}
执行后只有line[0]
包含正确的字符串"BEGIN_TRANSACTION"。所有其他 line[i]
包含“0x00000001”。我在网上查找过,但无法在此处找到解决方案。
任何帮助表示赞赏。
注:我用的是Visual Studio2010
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL)
上面一行应该如下图所示。注意括号。
while ((line[i] = strtok_s(NULL, delim, &next_token)) != NULL)
解释一下:原来的while
条件由于运算符的优先顺序不正确。它等于:
line[i] = (strtok_s(NULL, delim, &next_token) != NULL)
这意味着它将 strtok_s
return 值与 NULL
的比较结果赋值给 line[i]
。这就是为什么 line[i]
得到 1
的原因(除了最后一个条目应该是 0)。
我在使用 strtok_s
时遇到了一些问题。在下面的代码中,read_data
包含字符串:
BEGIN_TRANSACTION CHANGE_0 PUT(debit_account,dbvalue.new)PUT(debit_account,dbvalue.new) CHANGE_0 PUT(credit_account,crvalue.new)PUT(credit_account,crvalue.new) OUTCOME_COMMITTED_0 END_TRANSACTION_0
下面是我的代码:
char *delim = " ";
char* next_token;
line[0] = strtok_s(read_data, delim, &next_token);
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL)
{
i++;
}
执行后只有line[0]
包含正确的字符串"BEGIN_TRANSACTION"。所有其他 line[i]
包含“0x00000001”。我在网上查找过,但无法在此处找到解决方案。
任何帮助表示赞赏。
注:我用的是Visual Studio2010
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL)
上面一行应该如下图所示。注意括号。
while ((line[i] = strtok_s(NULL, delim, &next_token)) != NULL)
解释一下:原来的while
条件由于运算符的优先顺序不正确。它等于:
line[i] = (strtok_s(NULL, delim, &next_token) != NULL)
这意味着它将 strtok_s
return 值与 NULL
的比较结果赋值给 line[i]
。这就是为什么 line[i]
得到 1
的原因(除了最后一个条目应该是 0)。