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/