我收到此错误:
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 回答
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
的函数 .你只是想要
注意:您还解除引用
s
,这将导致相同的编译错误 .strcpy2(*(t + i), *s);
中的表达式*(t + i)
是一个char类型,因为*
取消引用指针 .改变这些陈述
至
最好将函数声明为具有返回类型
char *
. 例如