【问题标题】:Pointer to array of character arrays指向字符数组数组的指针
【发布时间】:2012-11-06 04:25:17
【问题描述】:

好吧,这个让我难住了。我正在尝试将一组字符数组传递给我的类的构造函数。该类有一个私有属性,它存储一个指向字符数组数组的指针。然后该类可以通过指针处理数组。

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

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

【问题讨论】:

  • 不应该是char * charArray[MAX_LINES]...吗?
  • char charArray[MAX_LINES][MAX_STRING]

标签: c++ arrays pointers char


【解决方案1】:

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

正如其他人所指出的,您可以改用std::string,这可能是一个更好的选择。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      std::string 在这里最合适!它可以很好地处理字符串和字符数组!

      【讨论】:

        【解决方案4】:

        代码中几乎没有错误。我想您正试图从 Alphabetizer 对象内部引用主函数中的 charArray。如果是这种情况,则声明

        char * input[MAX_LINES][MAX_STRING];
        

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

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

        【讨论】:

          【解决方案5】:

          没有看到编译错误很难说,但我认为问题可能出在这一行:

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

          【讨论】:

            猜你喜欢
            • 2021-06-22
            • 1970-01-01
            • 2014-11-29
            • 1970-01-01
            • 1970-01-01
            • 2021-06-28
            • 2021-02-07
            • 1970-01-01
            相关资源
            最近更新 更多