我有一段代码,当使用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'是否具有合理的值。我错了吗?