xlab / c-for-go

Automatic C-Go Bindings Generator for Go Programming Language
https://c.for-go.com
MIT License
1.5k stars 119 forks source link

How to read char* value from Deref() #173

Open ljfuyuan opened 1 month ago

ljfuyuan commented 1 month ago

Hello, I got a C function returns struct like this:

typedef struct Result {
  char *version;
} Result;

struct Result init(void);

With generated go is

type Result struct {
    Version        []byte
    ref67033404    *C.Result
    allocs67033404 interface{}
}

And Deref() does't set the Len for the Version []byte, So is there any way to read Version out since i can not get the length,

Thanks.

xlab commented 1 month ago

Hi, it doesn't know len as in C the pointer just points to beginning. So you have to read the len value from somewhere or manually discover it reading byes until you meet \x00. You you can mark this pointer as safe string and it will automatically detect \x00 while copying the value.

ljfuyuan commented 1 month ago

Hi, it doesn't know len as in C the pointer just points to beginning. So you have to read the len value from somewhere or manually discover it reading byes until you meet \x00. You you can mark this pointer as safe string and it will automatically detect \x00 while copying the value.

Thanks a lot for your answer. I have tried various ways to add Tip in TRANSLATOR, but I still can't find a way to mark it as a safe string. Can you give me some tips? Thanks again.