指向字符阵列数组的指针

Pointer to array of character arrays

本文关键字:指针 数组 阵列 字符      更新时间:2023-10-16

好吧,这让我很难过。我试图将一系列角色阵列传递到我班级的构造函数中。该类具有一个私人属性,该属性存储了指向字符数组数组的指针。然后可以通过指针处理数组。

下面是一些证明所需功能的代码。但是,它不会编译。我如何修复此代码以使其可行?

using namespace std;
const int MAX_LINES = 10, MAX_STRING = 80;
class Alphabetizer{
    public:
        Alphabetizer(char * inArray[][MAX_STRING]) : input(inArray){};
    private:
        char * input[MAX_LINES][MAX_STRING];
};
int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;
}

如果您坚持使用C兼容的字符指针,我认为您将使用char **作为input的类型,幸运的是。这是执行此操作的常用方法(至少在C中),并且具有不强迫您定义最大字符串大小的额外好处。

正如其他人指出的那样,您可以使用std::string,这可能是更好的选择。

我猜是您不是将指针传递给char[][],而是通过char[][]

另外,您应该使用std::string代替char数组。

std::string将是最合适的!它可以很好地处理字符串和字符阵列!

代码中几乎没有错误。我想您正在尝试从字母表内部的主函数中引用chararray。如果是这样,声明

char * input[MAX_LINES][MAX_STRING];

是错误的,因为上述声明使输入成为((char*)的max_string数组)的max_line数组。总而言之,输入是一个数组,而不是通往任何内容数组的指针。如果您打算将其作为指针 - 其余代码暗示我 - 那么您必须执行以下操作,

const int MAX_LINES = 10, MAX_STRING = 80;
class Alphabetizer{
    public:
        Alphabetizer(char ((*ar)[MAX_LINES])[MAX_STRING]) : m_ar(ar){};
    private:
        char ((*m_ar)[10])[80];
};
int main(){
    char charArray[MAX_LINES][MAX_STRING];
    char ((*ar)[MAX_LINES])[MAX_STRING] = &charArray;
    Alphabetizer theAlaphBet(&charArray);
    return 0;
}

此外,

input(inArray)

是错误的,因为这等同于执行以下操作,

char a[1] = {'a'};
char b[1] = {'p'};
a = b;

将一个数组分配给另一个数组不会复制一个。您必须做明确的memcpy。(该语义在C或C 中没有意义)

很难不看到编译错误,但我认为问题可能是这一行:

Alphabetizer theAlaphBet(charArray);

您直接传递了数组而不是地址。它应该阅读:

Alphabetizer theAlaphBet( &charArray );

但是,我认为您可能会过度复杂的事情。您可能会使用参考而不是指针:

更好。
const int MAX_LINES = 10, MAX_STRING = 80;
class Alphabetizer{
    public:
        Alphabetizer(char & inArray[][MAX_STRING]) : input(inArray){};
    private:
        char & input[MAX_LINES][MAX_STRING];
};
int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;

}

您可能还想考虑使用std :: String,因为这可能有助于简化您的代码。