1

これは宿題なので、ばかげた制約があるかもしれませんが、ご容赦ください。これは単純な関数ですが、引き出されます。代入演算子を介して文字配列を返す必要がありますが、まったく機能していないようです。ポインターを試しましたが、運がありません。

#include <iostream>
using namespace std;

char* findMax(char*, char*);

int main()
{
    char aArray[50] = "Hello World",
        bArray[50] = "dlroW olleH",
        maxArray[50];

    maxArray[50] = findMax(aArray, bArray);

    cout << maxArray << " is the bigger of the 2 strings" << endl;
    return 0;
}

char* findMax(char* strA, char* strB){
    char* maxStr;

    if(strcmp(strA, strB) < 1)
        maxStr = strB;
    else
        maxStr = strA;

    return maxStr;
}

戻り値findMax()を計算すると bArray の値が出力されますが、代入演算子を介して maxArray に取得してもまったく機能しません。

4

1 に答える 1

2

これを行うには2つの方法があります。書かれているように、maxArrayは文字の配列です。配列を直接割り当てることはできません。代わりに、各文字を1つずつコピーする必要があります。これは、ループを使用するか、strcpy標準ライブラリ関数を呼び出すことで実行できます。

char maxArray[50];

strcpy(findMax(aArray, bArray), maxArray);

もう1つの方法は、の宣言をポインタに変更するmaxArrayことです。char *関数をループしたり呼び出したりすることなく、ポインターを直接割り当てることができます。

char *maxArray;

maxArray = findMax(aArray, bArray);

これと最初のソリューションの違いは微妙ですが、重要です。実際には、ととchar maxArray[50]は別に、50文字の3番目の配列を割り当てています。このアレイには、独自のストレージと独自の50バイトのメモリがあります。aArraybArray

2番目では、3番目の配列を作成しません。すでに存在する他の配列を指すことができるポインタを作成するだけです。割り当て後、またはのいずれかmaxArrayへの間接参照になります。これらの配列の1つのコピーではなく、それらの1つを指しています。aArraybArray

于 2012-08-30T00:31:17.490 に答える