hi, Gleb Peregud, Thanks to  your help. My quest is solved. <div><div> 56     ErlNifBinary input;</div><div> 57     if(!enif_inspect_iolist_as_binary(env, argv[0], &input)) {</div><div> 58      return enif_make_badarg(env); </div>
<div> 59     }</div><div> 60     char *y="yy";</div><div> 61     unsigned char* a=input.data;   </div><div> 62     int i=0;</div><div> 63     //test                                                                                                                                        </div>
<div> 64     while(i<input.size){</div><div> 65         fprintf(stderr,"a=%i,", a[i]);</div><div> 66         i++;</div><div> 67         //fprintf(stderr,"a=%i\n\r", *a);</div><div> 68         //a++;</div>
<div> 69     }</div><div> 70     fprintf(stderr,"input.size=%i\n\r", input.size);</div><div> 71     fprintf(stderr,"input.data=%s\n\r", input.data);</div><div> 72     //return enif_make_string(env, a, ERL_NIF_LATIN1);</div>
<div> 73     return enif_make_string_len(env, a, i,ERL_NIF_LATIN1);</div></div><div><br></div><div><br><div>Thanks agin.<br><br>from jason<br><div class="gmail_quote">2011/12/14 Gleb Peregud <span dir="ltr"><<a href="mailto:gleber.p@gmail.com">gleber.p@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2011/12/14 ÀÉÏÌÎä <<a href="mailto:langxianzhe@gmail.com">langxianzhe@gmail.com</a>>:<br>
<div class="im">> Thanks Gleb Peregud.<br>
><br>
> Your are right. But a new request is come on. I input list [1,7,0,9] as<br>
> parameter. Ii only return [1,7]. The [0,9] is lose. Maybe the '0' elment as<br>
> a NUL in C.<br>
> What  should i do .<br>
><br>
> Thanks<br>
><br>
> 8>complex6:get_name([1,7,0,9]).<br>
> [1,7]<br>
> 9><br>
<br>
</div>Most probably enif_get_string does copy all four bytes to the buffer,<br>
but enif_make_string treats NUL as termination mark of a string. Try<br>
using enif_make_string_len instead.<br>
<br>
On the other side it looks like you are interested in a binary-like<br>
data, instead of a string-like data. You can make use of the following<br>
code:<br>
<br>
ErlNifBinary input;<br>
if(!enif_inspect_iolist_as_binary(env, argv[0], &input)) {<br>
 return enif_make_badarg(env);<br>
}<br>
<br>
As the result of this:<br>
input.data - will contain pointer to a memory, where all bytes from<br>
argument are stored<br>
input.size - size of that memory area<br>
<br>
Also it's worth noting that this will work for both lists (with<br>
integers less than 256) and binaries, and for any nested combinations<br>
of them.<br>
</blockquote></div><br></div></div>