通过赋值运算符返回字符数组

时间:2012-08-30 00:27:50

标签: c++ arrays return-value assignment-operator character-arrays

所以这是一个家庭作业,可能会有一些荒谬的限制,但请耐心等待。这只是一个简单的功能,但已经绘制出来。我需要通过赋值运算符返回一个字符数组,但它似乎根本不起作用。我试过指针,但没有运气。

#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根本不起作用。

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点。如上所述,maxArray是一个字符数组。无法直接将数组分配给。相反,您需要逐个复制每个字符。您可以通过循环或通过调用strcpy标准库函数来执行此操作。

char maxArray[50];

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

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

char *maxArray;

maxArray = findMax(aArray, bArray);

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

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