const char*与const char**适配问题:argv传参至loadROM函数报错求助
解决
const char**与const char*参数不兼容的问题 嘿,这个问题其实是典型的数组指针和单个元素指针搞混了:argv本质是一个指向字符串数组的指针(类型是const char**),而你的loadROM函数需要的是单个文件名的字符串指针(const char*)——直接把整个数组指针传进去,类型当然不匹配啦!
下面给你具体的解决方法和注意事项:
1. 传递argv的单个元素才是正确姿势
argv数组里,argv[0]是你运行的程序本身的路径,argv[1]才是你在命令行输入的第一个文件名参数。所以你要传的是argv[1],而不是整个argv:
int main(int argc, const char *argv[]) { memory Memory; // 先检查参数数量,避免用户没传文件名导致越界 if (argc >= 2) { Memory.loadROM(argv[1]); // 这里argv[1]的类型就是const char*,完美匹配 } else { // 给用户个提示,不然人家不知道为啥程序跑不起来 printf("请传入ROM文件名作为命令行参数!\n"); return 1; } return 0; }
2. 别用强制转换凑数!
虽然你可以写(const char*)argv来强制绕过编译器的类型检查,但这绝对是自杀式操作——这样会把argv这个指针本身的内存地址当成字符串的起始位置,程序要么直接崩溃,要么读取一堆垃圾数据,完全达不到你加载ROM的目的。所以绝对不要用强制转换来解决这个问题,这是C/C++里的经典坑。
3. 别忘了参数合法性检查
一定要先判断argc的值:如果用户运行程序时没传文件名,argv[1]会是NULL,直接访问会触发未定义行为(比如程序崩溃)。上面的代码里加了argc >= 2的判断,能避免这种情况发生。
内容的提问来源于stack exchange,提问作者Aureal
相关产品推荐
相关产品推荐

