读取 C 语言中的字符串的 2D 数组



我正在尝试从键盘上的一些输入创建一个 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 不检查数组边界,这就是为什么您不会收到错误,而是通过访问数组末尾的内存来获得有趣的字符。

最新更新