首页 文章

C:从char转换为char *的转换无效?

提问于
浏览
1

我收到此错误:

array.cpp:在函数'void strcat2(char *,const char *)'中:array.cpp:74:错误:从'char'无效转换为'char *'array.cpp:74:错误:初始化参数1 'void strcpy2(char *,const char *)'array.cpp:74:错误:从'char'无效转换为'const char *'array.cpp:74:错误:初始化'void strcpy2的参数2(char *,const char *)'

尝试运行此代码时:

//Concatenates two arrays of characters using pointers
void strcat2(char* t, const char* s)
{
        unsigned int i;

        for (i = 0; *t; i++);
        strcpy2(*(t + i), *s);
}

这是它调用的strcpy2函数:

//Copies the information from one array of characters to another using pointers
void strcpy2(char* t, const char* s)
{
        for ( ; *t++ = *s++;);
}

它表示从char到char *的无效转换,但我在哪里尝试从char转换为char *?在我看来,代码中的所有内容都是char * . 我错过了什么?

我已多次查看此代码,似乎无法找到问题所在 . 我对指针比较新,很容易!非常感谢您的帮助!

3 回答

  • 1
    *(t + i)
    

    t 的类型为 char * .

    所以 t + i 表示 char * + i ,表示"add the value of i to the pointer to make a new pointer" . *(t + i) 然后取消引用新指针,该解除引用表达式的类型将为 char . 所以是的,编译器是正确的 . 您正在尝试将 char 传递给期望 pointer-to-char 的函数 .

    你只是想要

    strcpy2(t + i, s);
    

    注意:您还解除引用 s ,这将导致相同的编译错误 .

  • 1

    strcpy2(*(t + i), *s); 中的表达式 *(t + i) 是一个char类型,因为 * 取消引用指针 .

  • 2

    改变这些陈述

    for (i = 0; *t; i++);
    
    strcpy2(*(t + i), *s);
    

    for (i = 0; *(t + i ); i++);
    strcpy2( t + i, s);
    

    最好将函数声明为具有返回类型 char * . 例如

    char * strcat2(char* t, const char* s);
    

相关问题