#include <stdio.h>
#include <string.h>
int main(int argc, char **argv){
   
    char buf[BUFSIZ];
    short a = 0;
    short b = 0;
    short anzc=0;
    short anzd=0;
    char (*c)[BUFSIZ]; /* das hier war falsch, jetzt ist es korrekt ein Zeiger d.h. also quasi eine Liste auf String mit max. BUFSIZ-1 Länge */
    short *d;
 
    short i;
   
 
    while (fgets(buf, BUFSIZ, stdin) != NULL)
    {
        if (buf[strlen(buf)-1] == '\n') {
            char *isa = strstr(buf, "A:")==buf;
            char *isb = strstr(buf, "B:")==buf;
            char *isc = strstr(buf, "C:")==buf;
            char *isd = strstr(buf, "D:")==buf;
            if(isa){
                char *sep = buf+2;
                a = atoi(sep);
                d = malloc(a*sizeof(short));
            }else if(isb){
                 char *sep = buf+2;
                b = atoi(sep);
                c = calloc(b,BUFSIZ); /* hier natürlich einen Speicherbereich definieren und anschließend als Stringliste gebrauchen! */
            }else if(isc){
                char *sep = buf+2;
                strcpy(c[anzc],sep); /* und hier natürlich keine einfache Zuweisung, sondern strcpy */
                anzc++;
            }else if(isd){
                char *sep = buf+2;
                d[anzd] = atoi(sep);
                anzd++;
            }
          }
    }
 
    printf("%i\n", anzc);
    printf("%i\n", anzd);
 
  for(i=0; i<anzc;i++){
    printf("%s",c[i]); /* hier dann natürlich Strings ausgeben mit %s und nicht Zeichen %c wie du */
  }
 
  return 0;
}