int ncid, dimid, varid, temp_typeid, sounding_typeid; struct sea_sounding { int sounding_no; nc_vlen_t temp_vl; } data[DIM_LEN]; float *phoney; int i, j; /* Create phoney data. */ for (i=0; i < DIM_LEN; i++) { if (!(phoney = malloc(sizeof(float) * i+1))) return NC_ENOMEM; for (j = 0; j < i + 1; j++) phoney[j] = 23.5 - j; data[i].temp_vl.p = phoney; data[i].temp_vl.len = i+1; } /* Create a netcdf-4 file. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; /* Create the vlen type, with a float base type. */ if (nc_def_vlen(ncid, "temp_vlen", NC_FLOAT, &temp_typeid)) ERR; /* Create the compound type to hold a sea sounding. */ if (nc_def_compound(ncid, sizeof(struct sea_sounding), "sea_sounding", &sounding_typeid)) ERR; if (nc_insert_compound(ncid, sounding_typeid, "sounding_no", NC_COMPOUND_OFFSET(struct sea_sounding, sounding_no), NC_INT)) ERR; if (nc_insert_compound(ncid, sounding_typeid, "temp_vl", NC_COMPOUND_OFFSET(struct sea_sounding, temp_vl), temp_typeid)) ERR; /* Define a dimension, and a 1D var of sea sounding compound type. */ if (nc_def_dim(ncid, DIM_NAME, DIM_LEN, &dimid)) ERR; if (nc_def_var(ncid, "fun_soundings", sounding_typeid, 1, &dimid, &varid)) ERR; /* Write our array of phone data to the file, all at once. */ if (nc_put_var(ncid, varid, data)) ERR; /* We're done, yipee! */ if (nc_close(ncid)) ERR;