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

Returning Character Array via Assignment Operator

本文关键字:字符 数组 返回 赋值运算符      更新时间:2023-10-16

所以这是一项家庭作业,可能会有一些荒谬的约束,但请耐心等待。这只是一个简单的函数,但很长时间。我需要通过赋值运算符返回一个字符数组,但它似乎根本不起作用。我试过指点,但运气不好。

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

有两种方法可以做到这一点。正如所写的,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的间接引用。它不是其中一个数组的副本,它指向其中一个