从“char*”到“char”[-fpermissive]的转换无效,数组下标的类型“char[int]”无效

invalid conversion from ‘char*’ to ‘char’ [-fpermissive] and invalid types ‘char[int]’ for array subscript

本文关键字:char 无效 数组 下标 类型 int 转换 -fpermissive      更新时间:2023-10-16
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

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

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

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

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

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

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

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

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