Nan,
On the Unidata website, did you see the section on best practices for 
"Strings and Variables of type char"?  This section is more relevant for 
dealing with arrays of strings, rather than single strings.
http://www.unidata.ucar.edu/software/netcdf/docs/BestPractices.html#Strings%20and%20Variables%20of%20type%20char
However, your message implies that you are concerned mostly with single 
strings, as attributes.  In my opinion there is a simple and unique best 
practice for handling single attribute strings.
When writing, simply write the string as a character array of the 
desired string length, with no added padding or terminator byte.  This 
is effectively a variable length string in Netcdf.  Most Netcdf software 
and files that I have used recently seem to be consistent with this 
convention.
When reading, follow the reading guidelines under Unidata's best 
practices reference above.  When reading in a language that requires 
preallocated fixed length strings, simply over-allocate the length of 
the receiving string, and add padding on the right, as needed.
You're right, you should not be using formal Netcdf dimensions to store 
attribute lengths.  Netcdf stores the length of each attribute 
separately; this is not to be confused with formal dimensions for data 
arrays.  When reading a Netcdf character attribute, you should usually 
read the length first, then the string itself.  If you are doing dynamic 
allocation, then allocate the memory for the string between the two calls.
For example, in Fortran 90, use these Netcdf library routines:
 nf90_inquire_attribute        ! get length of string
 nf90_get_att                  ! read string
In C:
 nc_inq_att or nc_inq_attlen   /* get length of string */
 nc_get_att_text               /* read string */
For more information and complete examples, see the Netcdf documentation 
for these routines.  HTH.
--Dave
Nan Galbraith wrote:
Sorry if this has been covered repeatedly, I have searched the unidata 
site
and the netcdf users guide and just don't see the issue addressed 
directly.
It's a "best practices" question, but is not actually answered in that
document either.
I'm working on an implementation of NetCDF with a very varied group,
and the issue of string lengths is a real problem for some of them. 
All our
data is numeric;  attributes are often char though.
Some participants use software that requires them to specify string
lengths for char variables, I assume it's fortran but am not sure. Their
work-around is to declare these as dimensions in the netcdf file: 
STRING256,
STRING64, STRING32,  etc.
This seems like a misuse of the concept of dimensions in netcdf, but I'd
like to know if it's a widely accepted way to deal with the fact that 
strings
don't exist in netcdf.  I'd prefer to deal with the issue in software, 
and leave
this out of our specification. It seems ... messy to me, but if it's 
commonly
done then I guess I'll stop arguing.
Thanks very much -
Nan Galbraith
=============================================================================== 
To unsubscribe netcdfgroup, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
=============================================================================== 
==============================================================================
To unsubscribe netcdfgroup, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
==============================================================================