This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
David, >Date: Wed, 3 Dec 2003 12:12:32 -0500 >From: David Han <address@hidden> >Organization: NASA >To: Steve Emmerson <address@hidden> >Subject: Re: 20031203: How to create an array of string? The above message contained the following: > I tried exactly what you suggested below prior to sending my > question, but it didn't work. Can you send a little snippet of code > that creates a variable, writes and reads an array of string. Thanks. You can do that yourself using the ncgen(1) utility and the "test.cdl" file from my previous email: $ ncgen -c test.cdl #include <stdio.h> #include <stdlib.h> #include <netcdf.h> void check_err(const int stat, const int line, const char *file) { if (stat != NC_NOERR) { (void) fprintf(stderr, "line %d of %s: %s\n", line, file, nc_strerror(stat)); exit(1); } } int main() { /* create test.nc */ int ncid; /* netCDF id */ /* dimension ids */ int len_dim; int n1_dim; /* dimension lengths */ size_t len_len = 15; size_t n1_len = 2; /* variable ids */ int strings_id; /* rank (number of dimensions) for each variable */ # define RANK_strings 2 /* variable shapes */ int strings_dims[RANK_strings]; /* enter define mode */ int stat = nc_create("test.nc", NC_CLOBBER, &ncid); check_err(stat,__LINE__,__FILE__); /* define dimensions */ stat = nc_def_dim(ncid, "len", len_len, &len_dim); check_err(stat,__LINE__,__FILE__); stat = nc_def_dim(ncid, "n1", n1_len, &n1_dim); check_err(stat,__LINE__,__FILE__); /* define variables */ strings_dims[0] = n1_dim; strings_dims[1] = len_dim; stat = nc_def_var(ncid, "strings", NC_CHAR, RANK_strings, strings_dims, &strings_id); check_err(stat,__LINE__,__FILE__); /* leave define mode */ stat = nc_enddef (ncid); check_err(stat,__LINE__,__FILE__); { /* store strings */ static char strings[] = {"a string\000\000\000\000\000\000\000another string\000"}; stat = nc_put_var_text(ncid, strings_id, strings); check_err(stat,__LINE__,__FILE__); } stat = nc_close(ncid); check_err(stat,__LINE__,__FILE__); return 0; } Regards, Steve Emmerson