No puedes hacer eso, ya que LongMarca no tiene un valor inicial. Además de que sería mejor que utilizaras un puntero al tipo que utilizas.
struct cabecera {
int PosInicioMarca;
int LongMarca;
char *Marca; //[LongMarca*sizeof(char)];
char *Comentario; //[100*sizeof(char)];
};
ó
struct cabecera {
int PosInicioMarca;
int LongMarca;
char Marca[VALOR];
char Comentario[VALOR];
};
No necesitas utilizar el operador sizeof() puedes asignarle el valor directamente sin "calcularlo".
Un ejemplo usando asignación dinámica de memoria:
#include <stdio.h>
#include <stdlib.h>
struct cabecera {
int PosInicioMarca;
int LongMarca;
char *Marca; //[LongMarca*sizeof(char)];
char *Comentario; //[100*sizeof(char)];
};
int main(void)
{
struct cabecera tmp;
tmp.LongMarca = 10;
/* Les asignamos espacio en memoria a las cadenas */
tmp.
Marca = malloc(sizeof(char) * tmp.
LongMarca); tmp.
Comentario = malloc(sizeof(char) * 100);
/* Proceso ... */
/* Liberación de la memoria ocupada */
return 0;
}