I'm trying to figure out why memset doesn't work when I call it from inside a function. Of course I could use a for loop to reset all the values, but I'm here to learn and this thing leaves me with no explanations.
/* First source code */
#include <stdio.h>
#include <string.h>
int main(void) {
int i, j, num;
printf("Digit a number :");
scanf("%d", &num);
int magic[num][num];
printf("First\n");
for(i = 0; i < num; ++i) {
for(j = 0; j < num; ++j) {
printf("%4d", magic[i][j]);
}
printf("\n\n");
}
memset(magic, 0, sizeof(magic));
printf("Before\n");
for(i = 0; i < num; ++i) {
for(j = 0; j < num; ++j) {
printf("%4d", magic[i][j]);
}
printf("\n\n");
}
return 0;
}
/* Second source code */
#include <stdio.h>
#include <string.h>
void create_magic_square(int n, int magic_square[][n]);
void print_magic_square(int n, int magic_square[][n]);
int main(void) {
int num;
printf("Digit a number :");
scanf("%d", &num);
int magic[num][num];
create_magic_square(num, magic);
return 0;
}
void create_magic_square(int n, int magic_square[][n]) {
int i, j;
printf("First\n");
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
printf("%4d", magic_square[i][j]);
}
printf("\n\n");
}
//memset(magic_square, 0, n * sizeof(magic_square[0]));
memset(magic_square, 0, sizeof(magic_square));
printf("Before\n");
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
printf("%4d", magic_square[i][j]);
}
printf("\n\n");
}
}
In the second code (with the functions), I should put the line: memset (magic_square, 0, n * sizeof (magic_square [0])); for the two-dimensional array to be cleared, while with: memset (magic_square, 0, sizeof (magic_square)); does not work. Why is this happening?