C++编译报错:WCHAR**类型实参与const wchar_t*形参不兼容如何解决
问题原因
_wtoi 函数要求输入参数为 const wchar_t* 类型的宽字符串指针,但你定义的test函数入参args是WCHAR**类型(指向宽字符串指针的指针),二者类型不匹配,直接传入就会触发编译报错。
你之前在wmain函数里直接调用时,传入的是argv[n]这类数组元素(本身就是WCHAR*类型),所以不会出问题,抽成函数时你把二级指针直接传进了_wtoi才导致报错。
修复方案
根据你test函数的入参设计选对应方案即可:
- 如果你是把单个网卡索引的宽字符串指针的地址传入
test,只需要对二级指针解引用即可:
把两行_wtoi(args)都改成_wtoi(*args) - 如果你是直接把
wmain的argv参数整体传入了test,需要取下标指定你要解析的参数位置(一般网卡索引是第一个用户传参,对应下标1,下标0是程序自身路径):
把两行_wtoi(args)都改成_wtoi(args[1])
额外优化建议
- 你现有代码里用
std::cout输出args的逻辑也有问题:cout不支持直接输出宽字符串,而且你传二级指针输出的是内存地址而非字符串内容,建议改成std::wcout << L"running:" << *args << L":End" << "\n";(对应第一种入参场景,第二种场景替换为args[1]即可) - 增加参数合法性校验:调用
_wtoi前先判断args/*args/args[n]是否为空指针,避免运行时崩溃。
内容的提问来源于stack exchange,提问作者chris-p-tech
相关产品推荐
相关产品推荐

