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

时间:2015-07-12 22:52:41

标签: c toupper

当我尝试使用toupper时,编译器会给我这个错误:"警告:从指针转换为不同大小的整数。"和"警告:赋值使整数指针无需强制转换。"为什么呢?

for(i=0;i<argc;i++){
  argv[i]=(char)toupper((char)argv[i]);
}

1 个答案:

答案 0 :(得分:5)

argv是char**,指向指针的指针。可以把它想象成一个字符串数组,而不是字符串。

使用[i]建立索引会删除一个间接级别,因此argv[i]是指向字符的指针,char*

toupper()int toupper (int c); - 它希望单个字符为整数,而不是指向字符的指针,但是当您执行char*时,它会将argv[i]传递给它,然后你试图转换为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 in Keith Thompson's excellent answer elsewhere on SO