C 从指针强制转换为不同大小的整数。编译错误

C 从指针强制转换为不同大小的整数。编译错误,c,toupper,C,Toupper,当我尝试使用toupper时,编译器会给出以下错误:警告:从指针强制转换为不同大小的整数。警告:赋值从整数生成指针而不强制转换。为什么? for(i=0;i<argc;i++){ argv[i]=(char)toupper((char)argv[i]); } argv是一个char**,一个指向指针的指针。将其视为字符串数组,而不是字符串 使用[i]进行索引将删除一级间接寻址,因此argv[i]是指向字符的指针,即char* toupper是int-toupper-int-c;-它需

当我尝试使用toupper时,编译器会给出以下错误:警告:从指针强制转换为不同大小的整数。警告:赋值从整数生成指针而不强制转换。为什么?

for(i=0;i<argc;i++){
  argv[i]=(char)toupper((char)argv[i]);
}
argv是一个char**,一个指向指针的指针。将其视为字符串数组,而不是字符串

使用[i]进行索引将删除一级间接寻址,因此argv[i]是指向字符的指针,即char*

toupper是int-toupper-int-c;-它需要一个整数字符,而不是指向字符的指针,但在执行argv[i]时,您将向它传递一个char*,然后您将其转换为char。。。常规旧字符,通常与指针大小不同

argc表示有多少个命令行参数,argv[0]通常是可执行的名称。使用strlen获取argv中每个参数的长度

要将每个参数全部转换为大写,请执行以下操作:

for (int i = 0; i < argc; i++) {
    size_t len = strlen(argv[i]);
    for (size_t j = 0; j < len; j++) {
        argv[i][j] = (char)toupper((unsigned char)argv[i][j]);
    }
}

您可以阅读toupper的参数为何应转换为unsigned char

错误消息的哪部分不清楚?或者您正在询问为什么将指针强制转换为不同大小的整数是错误的?请删除显式强制转换。如果您仍然收到错误/警告,则表明您做错了。您是要将第一个字母转换为大写还是整个字符串?Argc是多少个字符串,而不是长度。其余的都是伊斯卡尔·贾拉克解释的。argv的第一个维度是参数字符串,第二个维度是字符串的每个字符。toupper的参数应转换为无符号字符,而不是int.bear。。我是C新手,但是当argv[I][j]仅用一个维度初始化时,它怎么可能呢?更进一步,这是编译的,但是当我运行程序,并给它abcdefg,程序返回@RickyYang是什么让你认为argv是用一个维度初始化的?argc本质上是一维的长度,但是argv中的每个字符*都有不同的长度,这取决于您传入的命令行参数。@RickyYang看一看argv[0]通常是调用的程序的名称,在本例中。/prog-看到输出是如何大写的了吗?不幸的是,ideone不允许您设置命令行参数,因此您只能在那里的输出中看到默认参数?因为我得到的结果是一堆空格和问号。