c - 将数组中的所有值设置为零时出错

标签 c

我只是想用零值初始化一个动态创建的矩阵:

#include <stdio.h>
#include <stdlib.h>

void writeMatrix (int **m, int size) {
    int i, j;
    for (i=0; i<size; i++) {
        for (j=0; j<size; j++) {
            printf("%i ", m[i][j]);
        }
        printf("\n");
    }
}

int main(void) {

    int i, size;
    scanf("%i", &size);

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

    writeMatrix(m, size);

    return 0;
}

但它因 this error 而崩溃:

compilation info
prog.c: In function 'main':
prog.c:23:10: error: expected expression before '{' token
   m[i] = {0};
          ^

这不是将所有矩阵值设置为零的正确方法吗?

提前致谢。

最佳答案

您不能使用类似 m[i] = {0}; 的语法,除非您在定义数组时对其进行初始化。你要使用的是memset:

memset(m[i], 0, size * sizeof(int));

或者您可以使用 calloc,它为数组分配内存并立即将其清零:

m[i] = calloc(size, sizeof(int));

关于c - 将数组中的所有值设置为零时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530793/

相关文章:

在调用 C 中的任何 exec 函数后,我可以在子进程中使用父进程打开的文件描述符吗?

c++ - 将 mysql_row 转换为整数

c - 可变大小的对象可能无法初始化 - C 错误

c - C 中的文字和变量(有符号与无符号短整型)有什么区别?

c - 即使文件存在(由 readdir() 返回),C 中的 fopen() 也返回 NULL

c - Vigenere cs50 Pset2 末尾的额外字符

c - 使用 sleep 和 select 信号

c - 将字符串拆分为标记,忽略 ""中包含的子字符串

c - c中的值如何存储在不同的数据类型中

c - 如何在编译时链接Libb64库?