所以,我试图分配内存以在其中插入文件名。我的结构 Estado 定义如下:
typedef struct estado{
char modo;
char jogador;
char matriz[8][8];
int pretas;
int brancas;
char *nome[10];
int current;
} Estado;
我尝试这样做:
Estado insereFicheiro(Estado estado , char* nome){
estado.nome[estado.current] = malloc(sizeof(char*));
estado.nome[estado.current++] = nome;
return estado;
}
我做错了什么?
您显示的代码有两个问题:
-
跟
estado.nome[estado.current] = malloc(sizeof(char*));
只为指针分配空间,而不是整个字符串。这就像你创建一个由一个指针组成的数组。您需要为字符串本身分配空间,其长度来自
strlen
,以及末尾的 null 终止符:estado.nome[estado.current] = malloc(strlen(nome) + 1); // +1 for null-terminator
-
跟
estado.nome[estado.current++] = nome;
覆盖上面创建的指针。这相当于例如
int a; a = 5; a = 10;
然后惊讶于a
不再等于5
.您需要复制字符串,而不是指针:strcpy(estado.nome[estado.current++], nome);
,您需要free
稍后在代码中分配的内存。
当然,您应该进行一些边界检查,以确保您不会超出estado.nome
数组的边界(即检查estado.current < 10
(。