指向字符数组数组的指针

时间:2012-11-06 04:25:18

标签: c++ arrays pointers char

好的,这个让我难过。我试图将一个字符数组数组传递给我的类的构造函数。该类具有private属性,该属性存储指向字符数组数组的指针。然后,类可以通过指针处理数组。

下面是一些演示所需功能的代码。但是,它不会编译。如何修复此代码以使其有效?

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;
}

5 个答案:

答案 0 :(得分:3)

如果您坚持使用与C兼容的角色指针,我认为使用char **作为input的类型,您将获得最好的运气。这是更常用的方法(至少在C语言中),它还有一个额外的好处,就是不要强制你定义最大字符串大小。

正如其他人所指出的那样,你可以利用std::string代替,这可能是一个更好的选择。

答案 1 :(得分:0)

我猜你没有传递指向char[][]的指针,而是传递char[][]

此外,您应该使用std::string而不是char数组。

答案 2 :(得分:0)

std::string将是最合适的!它足够好地处理字符串和字符数组!

答案 3 :(得分:0)

代码中的错误很少。我想你试图从Alphabetizer对象里面引用main函数中的charArray。如果是这样的声明

char * input[MAX_LINES][MAX_STRING];

是错误的,因为上面的声明使得输入一个MAX_LINE数组(MAX_STRING的数组为(char *))。总之,输入是一个数组,而不是指向任何数组的指针。如果您打算将它作为指针 - 这是您的其他代码提示给我的 - 那么您必须执行以下操作,

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 ++中没有意义)

答案 4 :(得分:0)

在没有看到编译错误的情况下很难判断,但我认为问题可能出在这一行:

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,因为这可能有助于简化您的代码。