char actual_space[MAXDIMS][16];
char *pointr_array[MAXDIMS];
for ( i = 0; i < MAXDIMS; i++ ) pointr_array[i] = actual_space[i];
status = gsdInqSize( ..., pointr_array, ... );
The reason why this call works but passing actual_space does not work, is that gsdInqSize uses the given value as a char **. So in this routine given[1] goes forward in memory by the size of a char * or the number of bytes needed to store a pointer. actual_space would need a step in memory by 16 bytes, i.e. the distance from one string to the next. The main routine knows about this, because it declared actual_space _and_ pointr_array.
The Global Section Datafile (GSD) access library