C++:从 char 到 char* 的无效转换?
Posted
技术标签:
【中文标题】C++:从 char 到 char* 的无效转换?【英文标题】:C++: invalid conversion from char to char*? 【发布时间】:2014-04-17 23:05:37 【问题描述】:我收到此错误:
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: 错误: 初始化参数 2'void strcpy2(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*。我错过了什么?
我已多次查看此代码,但似乎无法找到问题所在。我对指针比较陌生,放轻松!非常感谢您的帮助!
【问题讨论】:
如果你真的在使用 C++,我可以推荐std::string
吗?
对不起,我没有提到这是作业。
我想,只有在学术界他们才会要求你在 C++ 中使用 char*
来处理字符串;)
【参考方案1】:
*(t + i)
t
的类型为 char *
。
所以t + i
表示char * + i
,意思是“将 i 的值添加到指针以生成新指针”。 *(t + i)
然后取消引用该新指针,该取消引用表达式的类型将是 char
。所以是的,编译器是正确的。您正在尝试将 char
传递给需要 pointer-to-char
的函数。
你只是想要
strcpy2(t + i, s);
注意:您还取消了 s
的引用,这将导致相同的编译错误。
【讨论】:
谢谢!你解释得很好。此外,for 之后的;
不是错误,因为当 *t 为真(strcpy2 不在 for 循环下)时,for 实际上除了递增 i 之外没有做任何事情。
@Pod ;在 for 之后不是错误。
正确——我看错了。我通常会在这样的事情之后添加类似于 /* 故意 */ 的评论。我的眼睛已经习惯了普通的 for 循环,我什至没有看 for 循环在做什么:)【参考方案2】:
strcpy2(*(t + i), *s);
中的表达式 *(t + i)
是 char 类型,因为 *
取消引用指针。
【讨论】:
【参考方案3】:更改这些语句
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);
【讨论】:
以上是关于C++:从 char 到 char* 的无效转换?的主要内容,如果未能解决你的问题,请参考以下文章
从“const char*”到“unsigned char*”的无效转换
为啥从字符串常量转换为 'char*' 在 C 中有效但在 C++ 中无效
从'const char *'到'char *'的无效转换[-fpermissive]; VTK-7.1.1编译错误
使用 std::sort 从 'char' 到 'char*' 的无效转换
从 ‘char*’ 到 ‘char’ 的无效转换 [-fpermissive] 如何打印?但在变量内部
发布 HC-SE04 MQTT ESP8266 的值“从 'char' 到 'char*' [-fpermissive] 的无效转换”