1

読みやすくするために、多くのコードを切り取っています。具体的には、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;
}
4

5 に答える 5

3
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 を直接操作するため、ポインターを返す必要はありません。

于 2012-05-03T04:28:28.793 に答える
2

配列は C++ のポインタに分解されるため、そうするとreturn String1が返されるchar*ため、関数の戻り値の型は になりますchar*

于 2012-05-03T04:22:17.107 に答える
1

文字列ではなく、ヘッダーに文字を返しています。

于 2012-05-03T04:20:58.873 に答える
1

関数ヘッダーchar MYstrcat(char string1[],char string2[]); は戻り値の型を char として宣言していますが、関数本体は文字列を返しています。return string1;

于 2012-05-03T04:25:35.077 に答える
0

string1はchar配列であるためです。ie:char [] ...ただし、関数の戻り型はcharです。そのため、エラーが発生しました。関数の戻り型をchar *に変更してから、コードをテストできます。幸運を。

于 2012-05-03T09:12:09.290 に答える