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
答案 0 :(得分:1)
解决您的类型问题......
正如wRAR所说,问题似乎是char* a;
需要char** a;
。 char*
是一种指针类型,它指向要解释为char
值的内存块,例如字符串。你在这里看起来需要的是一个char**
,它是一个指针类型,它引用一个内存块来解释为单独的char*
值,例如一个字符串数组。
另一个问题是你需要将char** a;
初始化为实际存在,因为目前它不会指向任何特定的东西。因此,您很可能会遇到导致应用程序崩溃的访问冲突。要进行初始化,请执行char** a = new char* [m];
。
答案 1 :(得分:0)
如果您想要一个char*
数组,则需要将其声明为char**
(代码中的变量a
)。