c - 为什么strtok_s在第一次使用后返回0x00000001?

标签 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

最佳答案

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

关于c - 为什么strtok_s在第一次使用后返回0x00000001?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673282/

相关文章:

C、读取文件并分割

java - 仅在一行 String Android 中更改文本颜色

visual-studio - Visual Studio 数据库版中的 "Database Project"和 "Server Project"有什么区别?

c - 使用 C 反转位图颜色不会改变图像

c - objdump -t/usr/bin/sort 命令不显示任何符号

c++ - : 0xC0000005: Access violation reading location 0xccccccc0 with recursive vector search 中 0x770115de 的未处理异常

C# 子串 : Removing first three characters

c++ - 如何使用 ms code gen 添加/bigobj 切换到 clang?

c++ - 调用外部访问器函数时出错

c - 将 0 表示为 gnss 坐标的负数