【问题标题】:I get a conversion error from char* to char when I try and compile my code尝试编译代码时出现从 char* 到 char 的转换错误
【发布时间】:2012-05-03 04:19:37
【问题描述】:

为了便于阅读,我删减了很多代码。具体来说,我正在尝试重写 strcat

#include <iostream>
using namespace std;

char MYstrcat(char string1[],char string2[]);

int main()
{
    char letter, letter_ans, again;
    const int SIZE = 80;
    char string1 [SIZE];
    char string2 [SIZE];

获取字符数组的输入

    cout << "Enter the first string: ";
    cin >> string1;
    cout << "Enter the second string: ";
    cin >> string2;
    letter_ans=MYstrcat(string1, string2);
    cout << letter_ans;

    cin.get(); cin.get();
    return 0;
}

这是我的 strcat 函数版本

char MYstrcat(char string1[],char string2[])
{ 
    int i = 0; //Counters
    int j = 0;

    //Read until null character is encountered then append.
    while (string1[i] != '\0')
    {
        i++;
    }
    while (string2[j]!= '\0'){
        string1[i] = string2[j];
        i++;
        j++;
    }
    string1[i]='\0'; // Place a null character in string2.

我在下一行得到错误:从 'char*' 到 'char' 的无效转换

    return string1;
}

【问题讨论】:

  • 注意string1[i]='\0'; // Place a null character in string2中的错误评论
  • 你应该避免在 C++ 中使用原始数组:stackoverflow.com/a/10253277/365496
  • 哈哈,让我失望了,非常感谢!

标签: c++ function


【解决方案1】:
char MYstrcat(char string1[],char string2[]); // returns a single character
char *MYstrcat(char string1[],char string2[]); // returns a pointer to a string that can be used like string1[] and string2[]

同样,

char letter_ans;    // this gives space for a single char, like int int_ans;
char *letter_ans;   // this makes a pointer to an array of char's, the proper return type

但是,由于您返回的是 string1,因此您可能甚至不想使用返回类型。如果你这样声明你的函数:

void MYstrcat(char *string1,char *string2);

它将直接对string1进行操作,无需返回指向它的指针。

【讨论】:

  • 非常感谢!这个解释非常有帮助,我的代码现在可以工作了。我之前让它作为一个 void 函数工作,但我希望它返回一个值,以防我想对返回的值做更多的事情。
  • @ceeplusplus 如果你喜欢这个答案,别忘了点击复选标记! :-P 谢谢
【解决方案2】:

数组分解为 C++ 中的指针,因此当您执行 return String1 时,您将返回一个 char*,因此您的函数的返回类型应该是 char*

【讨论】:

  • +0.50000004 表示正确答案,+0.49999996 表示“分解” = +1(或差不多)
  • -0.000001 缺少内容。不是我投了反对票,而是付出了一些努力,是吗? :-P
【解决方案3】:

您在标题中返回一个字符,而不是一个字符串。

【讨论】:

  • 我不确定我是否跟随。我希望函数返回一个字符数组而不是一个字符串。我刚刚尝试将原型和标头更改为 `string MYstrcat(char string1[],char string2[]) 但这在我的函数调用中给了我一个不同的错误:无法将 'std::string' 转换为 'char' in assignment|
  • @ceeplusplus,如果不使用std::string,您必须将其更改为char *,但请确保您没有返回指向函数结束后将被破坏的东西的指针.
【解决方案4】:

函数头char MYstrcat(char string1[],char string2[]); 声明返回类型为char,但函数体返回的是字符串。 return string1;

【讨论】:

    【解决方案5】:

    因为 string1 是一个字符数组。 ie:char[]... 但你的函数的返回类型是 char 。所以你得到了一个错误。你可以将函数的返回类型更改为 char*,然后测试你的代码。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多