Re: [netcdfgroup] NC_STRING and NC_CHAR ... How to read strings?

I guess it was not a segmentation fault, but a error return triggering
C++ exception. I was able to get it to trigger a real segmentation
fault, but changing  

char buffer[20];
inst_var.getVar(buffer);

to 

char * buffer;
inst_var.getVar(&buffer);

gives me a pointer to a correct string. It is just bizarre!!! Does it
mean I now can modify that sting and it is OK?


On Thu, 2019-02-28 at 04:31 +0000, Panov Sergey wrote:
> I have a very basic question -- how to read "string" variable in C or
> C++ 
> 
> The ncdump tells me the variable type is "string".  When I try to
> read
> it using
> 
>  void getVar(char* dataValues) const;
> 
> function of class NcVar of netcdf-cxx4 I am hitting a segmentation
> fault. I am not sure why it is a segmentation fault, but it comes
> from 
> 
> ...
>    /* No NC_CHAR conversions, you pervert! */
>   if (var->type_info->nc_typeid != *mem_nc_type &&
>       (var->type_info->nc_typeid == NC_CHAR || *mem_nc_type ==
> NC_CHAR))
>     return NC_ECHAR;
> ...
> 
> code in check_for_vara() function in nc4hdf.c .
>  The var->type_info->nc_typeid is NC_STRING (12) and this check
> should
> just fail (the reading of the variable should just fail, but it
> "throws
> an exception" ... causes a segmentation fault for some reason).
> 
> The stack is;
> check_for_vara nc4hdf.c:477
> nc4_get_vara nc4hdf.c:905
> nc4_get_vara_tc nc4var.c:1379
> NC4_get_vara nc4var.c:1396
> NC_get_vara dvarget.c:101
> NC_get_var dvarget.c:117
> nc_get_var_text dvarget.c:1020
> netCDF::NcVar::getVar ncVar.cpp:1340
> main cfradial_rd.cpp:47
> __libc_start_main 0x00007ffff485a413
> _start 0x00000000004021ee
> 
> The C++ code is calling C function nc_get_var_text() to read this
> string which should have been normal.  
> 
> What am I doing wrong and what is the right way of reading "string"
> variables?
> 
> PS. Does anyone else dislike the official C++ library API or it is
> just
> me?  
>  
> _______________________________________________
> NOTE: All exchanges posted to Unidata maintained email lists are
> recorded in the Unidata inquiry tracking system and made publicly
> available through the web.  Users who post to any of the lists we
> maintain are reminded to remove any personal information that they
> do not want to be made public.
> 
> 
> netcdfgroup mailing list
> netcdfgroup@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe,  visit: 
> http://www.unidata.ucar.edu/mailing_lists/ 
  • 2019 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: