strtok_r行为和指针

时间:2014-08-18 17:36:24

标签: c c99

我有一段代码,当使用GCC-4.5.1针对x86_64进行编译时,会出现以下警告:

error: ctx1 may be used uninitialized in this function

以下是代码段:

int args_tokenize(struct kvargs *kvlist, const char *params)
{
   char *str, *ctx1;
   str = strdup(params);
   ...

   while ((str = strtok_r(str, KVARGS_PAIRS_DELIM, &ctx1)) != NULL) {
     /* here goes the logic */
     ...
   }

   return 0;
}

所以由于某种原因,strtok_r()不喜欢ctx1没有被初始化,尽管根据'man strtok_r':

  

saveptr参数是指向char *变量的指针   由strtok_r()内部使用以维护上下文   在解析相同字符串的连续调用之间。

     

在第一次调用strtok_r()时,str应该指向字符串   要解析,并忽略saveptr的值。在随后的   调用,str应为NULL,saveptr应保持不变   自上一次电话会议以来。

据我了解,它不应该关心'saveptr'是否具有合理的值。我错了吗?

0 个答案:

没有答案