You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:12:59