C 不兼容的整数到指针转换,将 'int' 传递给类型 'const char *' 的参数;

标签 c casting

我试图从头开始创建一个 tolower 函数(出于学习目的),即使我转换了正确的类型,仍然会收到此错误:

alternate.c:13:18: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'; [-Werror]
                                strcat(temp, (char) i + 32);
                                             ^~~~~~~~~~~~~
/usr/include/string.h:136:72: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
                                                                       ^
alternate.c:15:19: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'; [-Werror]
                                strcat(temp,  i);
                                              ^
/usr/include/string.h:136:72: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
                                                                       ^
alternate.c:18:17: error: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror]
                        strcat(temp, uppercase[i]);
                                     ^~~~~~~~~~~~
                                     &
/usr/include/string.h:136:72: note: passing argument to parameter '__src' here
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
                                                                       ^
3 errors generated.

这是导致问题的代码:

char * toLowerCase(char * uppercase){
    char * temp = "";
    for(int i =0; i<strlen(uppercase); i++){

        if( (int) uppercase[i] != 32){

            if( (int) uppercase[i] < 97){
                strcat(temp, (char) i + 32);
            }else{
                strcat(temp,  i);
            }
        }else{
            strcat(temp, uppercase[i]);
        }   
    }
    return temp;
}

最佳答案

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char *toLowerCase(const char *uppercase){
    char *temp = malloc(strlen(uppercase)+1);

    if(temp){
        char *p = temp;
        while(*p++ = tolower(*uppercase++));
        /*
        while(*uppercase){
            *p++ = tolower(*uppercase++);
        }
        *p = '\0';
        */
    }
    return temp;
}

int main(void){
    char *str = toLowerCase("ABC-XYZ");
    printf("%s\n", str);//abc-xyz
    free(str);
    return 0;
}

关于C 不兼容的整数到指针转换,将 'int' 传递给类型 'const char *' 的参数;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034446/

相关文章:

c - 可以在函数参数中声明一个数组吗?

c - 原子引用计数共享不可变数据是否需要内存屏障?

c++ - C++ 标准对于从类型 a 转换为类型 b 与实例化/构造类型 b 之间的区别有何规​​定?

c++ - TypeCasting 在 C++ 中将 <int, class A> 映射到 <int, class B>

c - 如何将结构类型转换为分配的 char 内存空间

python - 是否可以在所有平台上确定性地从 jpeg 文件中读取像素?

c++ - 如何在不指定 C++ 中的所有参数的情况下声明程序的 main() 入口点?

java - 变量声明中的括号

C 多个Strtok确定分隔符

c++ - 对象的 reinterpret_cast