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] 的无效转换”