n维的字符串数组 - c

时间:2017-10-31 15:27:22

标签: c arrays string

我想知道如何为每个数组创建一个包含2个字符串的动态数组。而且我不确定如何。我知道如何创建一个字符串数组,但不是“n”维度之一,我想知道如何。

以下是我的代码的一些部分,它们目前只是一个字符串数组:

首先,我在一个结构中声明了我的数组:

overwrite = TRUE

然后我在第一次注册时初始化它:

typedef struct{
   char bloqueCedula[7];
   short bloqueDia;
   char **bloqueLibrosPrestados;//This is the array i want to modify
}RegistroControl;

在上面的代码中,我创建了长度为7的每个字符串,因为我已经知道了我需要复制的长度,即6。

这就是我不断发展的方式:

void primerRegistro(RegistroArchivo regArch, RegistroControl *regControl) {

    strcpy(regControl->bloqueCedula, regArch.cedula);
    regControl->bloqueDia = regArch.dia;
    regControl->bloqueLibrosPrestados = malloc(cont * sizeof(regControl->bloqueLibrosPrestados));
    regControl->bloqueLibrosPrestados[0] = malloc(7 * sizeof(char));
    strcpy(regControl->bloqueLibrosPrestados[0], regArch.codigoLibro);
    imprimirCabecera();
    //printf("%s\n", regControl->bloqueLibrosPrestados[cont-1]);
}

我想知道如何在7长度的旁边添加另一个2长度的字符串。这段代码是从文件读取直到达到EOF的代码的一部分,这就是为什么我使用了一个“cont”的计数器。

1 个答案:

答案 0 :(得分:0)

你有char**

假设a。为a分配一些内存。

a= malloc(sizeof(char*)*10);
if( a == NULL)
{
    fprintf(stderr,"%s","error in malloc");
    exit(1);
}

现在,对于a的每个位置,您只对char执行相同的操作。

a[i]= malloc(sizeof(char)*100);
if( a[i] == NULL)
{
   //...

}

完成后释放它们。

free(a[i]); //for each i.
free(a);
a=NULL;

现在这是2维

现在我不知道你什么时候需要更多。这总是可以延长。

char *** aa;但不需要它。 {read this}

如果您需要,那么您应该考虑一下您的数据表示。

N维字符串的理论思想

对于n维,你可以这样做: -

char **...n...** complicated= malloc(sizeof(char**...n...>**)*N1);
// malloc check
for(int i=0;i<N1;i++)
  complicated[i]= malloc(sizeof(char**...(n-1)...**)*N2);

...