使用strlen获取命令行参数长度时出现指针类型不兼容警告的问题咨询
使用strlen获取命令行参数长度时出现指针类型不兼容警告的问题咨询
嘿,我看了你的代码和遇到的警告,问题根源其实在main函数的参数定义上!
你现在写的main函数是:
int main(int argc, char** argv[])
这里的char** argv[]是个错误的定义——它表示的是一个「指向字符指针数组的指针」,但我们实际需要的命令行参数数组是char* argv[](字符指针数组),或者等价的char** argv(因为数组作为函数参数会自动退化为指向首元素的指针)。
为什么会触发警告呢?因为你定义的argv是char** argv[],那argv[1]的类型就变成了char**,而strlen函数要求的参数类型是const char*,这俩类型不匹配,编译器自然就抛出了「指针类型不兼容」的警告。
只需要把main函数的参数改成标准写法就行,修改后的完整代码如下:
#include <stdio.h> #include <string.h> int main(int argc, char* argv[]){ if (argc != 2) { fprintf(stderr, "INVALID NUMBER OF ARGUMENTS"); return 1; } else { printf("%d", strlen(argv[1])); } return 0; }
或者也可以写成int main(int argc, char** argv),这两种写法在C标准里都是合法的,修改后argv[1]的类型就是char*,和strlen的参数要求匹配,警告就会消失,程序也能正确计算出命令行参数的长度啦。
备注:内容来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

