C:填充多维数组

C:填充多维数组,c,arrays,C,Arrays,我有几个数字要插入矩阵 这就是我如何一个接一个地得到我所有的数字: int i, n; int ch; int *arr; int dimension; int numbers = 0; char str[512]; // User input. fgets(str, sizeof str, stdin); for (i = 0; i <= (strlen(str)); i++) { if (str[i] != '\0' && !issp

我有几个数字要插入
矩阵

这就是我如何一个接一个地得到我所有的数字:

int i, n;
int ch;
int *arr;
int dimension;
int numbers = 0;
char str[512];

// User input.
fgets(str, sizeof str, stdin);

    for (i = 0; i <= (strlen(str)); i++)
    {
        if (str[i] != '\0' && !isspace(str[i]))
        {
            int num = atoi(&str[i]);
            numbers++;
            if (i == 0)
            {
                dimension = num;
                arr = allocatearraysize(dimension);
            }

            // Here i want to add the current number to my `Maxtix`.
        }
    }

free(arr);

int* allocatearraysize(int size)
{
    return (int *)malloc(size * size * sizeof(int));
}
仅用于查看该操作是否有效,但出现
错误

表达式必须具有指向对象类型的指针

编辑

因此,如果我的输入是
21234

第一个
数字
2
)意味着我的
矩阵
应该是
2x2
,我希望在此
数字
2
)之后有4个
数字

如果
编号
编号
与第一个
编号
不匹配,例如:

3 1 2 3 4
第一个
数字
这里是3,因此在此
数字
之后,我将
9
数字
排除在外,因此在这种情况下,我只想打印
错误
消息


但是我想以任何方式将这个
数字
插入我的
矩阵

如果不是二维数组,则不能使用
var[i][j]
访问数组

一个可能的答案是:

int i, j, n;
int ch;
int **arr;
int size;
int numbers = 0;
char str[512];

fgets(str, sizeof str, stdin);

size = atoi(&str[0]);

if(size > 1) {
    arr = (int**) malloc(size * sizeof(int*))

    for (i = 0; i < size; i++)
        arr[i] = (int*) malloc(size * sizeof(int));

    // Fill with arr[i][j]

    free(arr);
}
else {
    fprintf(stderr, "Size must be a valid number");
}
inti,j,n;
int-ch;
int**arr;
整数大小;
整数=0;
char-str[512];
fgets(str,str的大小,stdin);
大小=atoi(&str[0]);
如果(大小>1){
arr=(int**)malloc(size*sizeof(int*))
对于(i=0;i
它不应该是
num=atoi(str[i])
?@GokulanRavi不应该是
atoi
需要
char*
作为参数,而不是char。你只需要把
atoi(str)
。请先阅读函数手册再使用它。此代码有很多问题,首先是您正在迭代输入字符串的每个字符,但看起来您只想将字符串读入int。@Grantly我已将其作为副本关闭,您可以按照以下步骤操作。当然,自从我写了那篇文章后,我就有点偏袒了,不过如果你看一看,你会发现领域专家、C编程书籍作者和C标准委员会成员发布了同样的建议。这也不是二维数组,但是你可以通过
[x][y]
访问元素。你的回答自相矛盾。@Lundin你这么说是因为他实际上是在用指针指向指针吗?(严格来说,它不是二维阵列)?我只是想,这种动态分配让OP明白了——尽管它并不精确……@Grantly是的,这不是一个2D数组,它是一种查找表的形式。它比动态分配的2D阵列慢得多。此外,它更危险,更容易出错。在这种情况下,不需要使用基于指针的查找表。当你可以编写快速而安全的代码来实现同样的目标时,不要编写缓慢而危险的代码。@Lundin忘记了严格的解释,显然这是一种思维表征。我只是给这个问题一个简单的解决方案。我不认为OP在寻找最快、最严格的方法code@Lundin谢谢,是的,我听到了:)很高兴在代码中看到您的替代方案,但我不想让您在这里详细说明。。。对于OP来说,这是一个很好的选择
int i, j, n;
int ch;
int **arr;
int size;
int numbers = 0;
char str[512];

fgets(str, sizeof str, stdin);

size = atoi(&str[0]);

if(size > 1) {
    arr = (int**) malloc(size * sizeof(int*))

    for (i = 0; i < size; i++)
        arr[i] = (int*) malloc(size * sizeof(int));

    // Fill with arr[i][j]

    free(arr);
}
else {
    fprintf(stderr, "Size must be a valid number");
}