[英]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 Studio 2010
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]
。 这就是为什么在line[i]
得到1
原因(除了最后一项应该为0)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.