[erlang-questions] [Erlang][Request] Invoke C funtion in Erlang

Gleb Peregud gleber.p@REDACTED
Wed Dec 14 13:37:17 CET 2011

2011/12/14 郎咸武 <langxianzhe@REDACTED>:
> hi,
> I using nif mehod to Invoke C funtion in Erlang.
> come code:
> 1,
> char *y;
> if (!enif_get_string(env, argv[0], y, sizeof(y), ERL_NIF_LATIN1))
> I input "123456" args, but only return "123".
> 2,char *y;
> if (!enif_get_string(env, argv[0], y, 10, ERL_NIF_LATIN1))
> this only appear Segmentation fault
> I have no idea.
> Please help me.
> Thanks.
> From jason.

"char *y" is actually just a pointer, so sizeof(y) returns 4, which is
a size of the pointer. Since you don't know how long is the string,
you should prepare a big enough buffer to receive it. So try the
following code:

#define MAXBUFLEN       1024

char y[MAXBUFLEN];
if (enif_get_string(env, argv[0], y, MAXBUFLEN, ERL_NIF_LATIN1) < 1)
    return enif_make_badarg(env);

More information about the erlang-questions mailing list