为什么strtok_s在首次使用后会返回0x00000001?

时间:2016-04-17 06:13:30

标签: c string visual-studio strtok

我在使用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 Studio 2010

1 个答案:

答案 0 :(得分:5)

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返回值与NULL进行比较并将其分配给line[i]。这就是为1获得line[i]的原因(除了最后一个条目应为0)。