从'char *'到'char'[-fpermissive]的无效转换和用于数组下标的无效类型'char [int]'

时间:2014-09-02 11:36:18

标签: c++ char

int main() {
    int casee;
    int m, n;
    int k;
    char* a;
    char ch;

    cin >> casee;
    cin >> m;
    cin >> n;
    a = new char[m];
    for (int i = 0; i < m; i++) {
        a[i] = new char[n]; // # 20
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> ch;
            a[i][j] = ch; // # 28
        }
    }

    cout << a[2][3] << endl; // # 32

    return 0;
}

在28,30,32行中,我有这样的错误..

proj1.cpp: In function ‘int main()’:
proj1.cpp:20:18: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
proj1.cpp:28:10: error: invalid types ‘char[int]’ for array subscript
proj1.cpp:32:15: error: invalid types ‘char[int]’ for array subscript

我想使用动态分配方法分配多维数组。但是,我听说它不能通过动态分配来分配。因此,我用于循环分配。但是,它没有用。

如果你这样回答(↓),也许我不明白为什么“[wprime]”前面有指针。请另外回答指针存在的原因。

grid = new int* [wprime];
for (int i = 0; i < wprime; i++)
    grid[i] = new int[hprime];

我该如何解决问题.. 请帮助我b.b

2 个答案:

答案 0 :(得分:1)

解决您的类型问题......

正如wRAR所说,问题似乎是char* a;需要char** a;char*是一种指针类型,它指向要解释为char值的内存块,例如字符串。你在这里看起来需要的是一个char**,它是一个指针类型,它引用一个内存块来解释为单独的char*值,例如一个字符串数组。

另一个问题是你需要将char** a;初始化为实际存在,因为目前它不会指向任何特定的东西。因此,您很可能会遇到导致应用程序崩溃的访问冲突。要进行初始化,请执行char** a = new char* [m];

之类的操作

答案 1 :(得分:0)

如果您想要一个char*数组,则需要将其声明为char**(代码中的变量a)。