我正在尝试从键盘上的一些输入创建一个 2D 字符数组。我的主要问题是我不知道我做错了什么,但是当我超过数组的长度时,我能够得到一个结果。例如,如果我有一个 n x n 矩阵,我可以打印值 x[0][n] 或 x[0][n+1]。我只想知道我做错了什么,因为我在尝试越过数组的界限时应该得到一个错误。
#include <stdio.h>
#include <stdlib.h>
void *safeMalloc(int n) {
void *p = malloc(n);
if (p == NULL) {
printf("Error: malloc(%d) failed. Out of memory?n", n);
exit(EXIT_FAILURE);
}
return p;
}
char ** readMatrix(int m){
char **arr = safeMalloc(m*sizeof(char *));
int row;
for (row=0; row < m; row++) {
arr[row] = safeMalloc(m*sizeof(char));
}
int i,j;
for(i=0;i<m;i++){
for(j=0;j<m;j++){
scanf(" %c",&arr[i][j]);;
}
getchar();
}
return arr;
}
void printNumber(char **arr,int m){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%c", arr[i][j]);
}
printf("n");
}
}
int main(int argc, char **argv)
{
int n;
scanf("%d",&n);
char** arr;
arr=readMatrix(n);
printf("%cn",arr[0][8]);
printNumber(arr,n);
}
例如:
8
****....
****....
****....
****....
........
........
........
........
它按我的预期打印数组,但如果我超过绑定的 8,我仍然可以得到一些有趣的字符。
由于 C 不检查数组边界,这就是为什么您不会收到错误,而是通过访问数组末尾的内存来获得有趣的字符。