C语言 将内存分配给字符串数组



所以,我试图分配内存以在其中插入文件名。我的结构 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;
}

我做错了什么?

您显示的代码有两个问题:

  1. estado.nome[estado.current] = malloc(sizeof(char*));
    

    只为指针分配空间,而不是整个字符串。这就像你创建一个由一个指针组成的数组。您需要为字符串本身分配空间,其长度来自 strlen ,以及末尾的 null 终止符:

    estado.nome[estado.current] = malloc(strlen(nome) + 1);  // +1 for null-terminator
    
  2. 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(。

相关内容

  • 没有找到相关文章

最新更新