【问题标题】:Why does strtok_s return 0x00000001 after first use?为什么strtok_s第一次使用后返回0x00000001?
【发布时间】:2016-04-17 06:13:29
【问题描述】:

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

【问题讨论】:

    标签: c string visual-studio strtok


    【解决方案1】:
    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]。这就是为什么你会得到1line[i](除了最后一个条目应该是0)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2018-12-05
      • 2017-12-16
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多