这是我的C++代码:
const char SEP[2] = "/";
void somefn(char* string){
char *current, *next;
current = strtok_s(string, SEP, &next); // next is unitialized -> C6001 in VS 2020
...
}
它被某个带有某些标志的编译器认为是值得警告的(我相信应该无关紧要)。
唯一的问题是:
strtok_s
的参考文档显示,假设string
不是空指针,上述代码是完全有效的。“未初始化变量的地址是否是编译时常量”完全无关,与诊断无关。编译器认为您正在使用未初始化的内存。
但是,根据文档,只有当第一个参数为null
时,strtok_s
的第四个参数才需要初始化指向指针(通过前面对strtok_s
的调用)。
编译器似乎相当挑剔。看起来编译器无法向自己证明string
在这里永远不会是null
,所以它在抱怨这一点。
但是,如果您从未使用null
指针调用strtok_s
,那么这并没有什么问题。