在C中读取2D数组字符串

时间:2017-10-19 05:20:48

标签: c arrays

我正在尝试从键盘上的某些输入创建一个二维字符阵列。我的主要问题是我不知道我做错了什么但是当我超过长度时我能得到一个结果数组。例如,如果我有一个n×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("%c\n",arr[0][8]);
    printNumber(arr,n);
}

例如:

8
****....
****....
****....
****....
........
........
........
........

它按照我的预期打印数组,但如果我超过8区,我仍然可以得到一些有趣的字符。

1 个答案:

答案 0 :(得分:0)

由于C不检查数组边界,这就是为什么你没有得到错误,而是通过访问数组末尾的内存来获得有趣的字符。