C 如何打印以下二维阵列?

C 如何打印以下二维阵列?,c,C,但后来它裂开了。为什么?您的字母函数中的第二个for循环出现错误,您应该在该循环中分配一个char*指针,指向mat的每个元素: for(inti=0;这看起来像是一个关于C代码的问题。因此,我删除了(社区对此有点敏感。)O.T.:malloc()返回void*。不需要强制转换,因为void*是隐式强制转换到任何类型指针的。O.T.:*(arr+i)与arr[i]相同而后者更容易阅读。是否调试了代码?考虑将分配和算法分成两个不同的函数,使代码可读。 #include <stdio.h>

但后来它裂开了。为什么?

您的
字母
函数中的第二个
for
循环出现错误,您应该在该循环中分配一个
char*
指针,指向
mat
的每个元素:


for(inti=0;这看起来像是一个关于C代码的问题。因此,我删除了(社区对此有点敏感。)O.T.:
malloc()
返回
void*
。不需要强制转换,因为
void*
是隐式强制转换到任何类型指针的。O.T.:
*(arr+i)
arr[i]相同而后者更容易阅读。是否调试了代码?考虑将分配和算法分成两个不同的函数,使代码可读。
#include <stdio.h>
#include <stdlib.h>

int ** letters (int*arr, int nr_elem)
{
    char **mat=(char**)malloc( nr_elem * sizeof(char*));

    int max =0;
    for (int i =0; i<nr_elem;i++)
    {
        if( *(arr + i) > max)
            max = *(arr + i);
    }

    for (int i=0; i<nr_elem; i++)
    {
        *mat=(char*)malloc((*(arr+i))*sizeof(char));
    }

    for(int i=0; i<nr_elem;i++)
      {

      for(int j=0; j<(*(arr+i)); j++)
        {

            mat[i][j] = 'a'+ (*(arr+i))-1;
            printf("mat[%d][%d] = %c\n", i, j, mat[i][j]);
        }
      }


}

int main()
{

    int a[] = {3, 4, 5, 2, 3};
    int n = 5;
    letters(a, n);
    return 0;
}
m[0][0] = 'c'
m[0][1] = 'c'
m[0][2] = 'c'
m[1][0] = 'd'
m[1][1] = 'd'
m[1][2] = 'd'
m[1][3] = 'd'