【问题标题】:Returning Character Array via Assignment Operator通过赋值运算符返回字符数组
【发布时间】:2012-08-24 16:14:41
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 啊,maxArray 指针正是我要找的。谢谢!
    猜你喜欢
    • 2019-12-29
    • 2015-07-16
    • 2011-03-15
    • 2015-04-06
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多