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

有两种方法可以做到这一点。如所写,maxArray是一个字符数组。不能直接分配数组。相反,您需要一个一个地复制每个字符。您可以通过循环或调用strcpy标准库函数来做到这一点。

char maxArray[50];

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

另一种方法是将声明更改maxArray为 a char *,一个指针。可以直接分配指针,而无需循环或调用函数。

char *maxArray;

maxArray = findMax(aArray, bArray);

这和第一个解决方案之间的区别是微妙的,但很重要。你实际上是在分配第三个 50 个字符的数组,与和char maxArray[50]分开。这个数组有它自己的存储,它自己的 50 字节内存。aArraybArray

在第二个中,您不会创建第三个数组。您只需创建一个指针,该指针可以指向已经存在的其他数组。赋值后,成为对ormaxArray的间接引用。它不是其中一个数组的副本,它指向其中一个。aArraybArray

于 2012-08-30T00:31:17.490 回答