Hi again, > ... > Following your explanation and example, I tried this and thought it would work > then, but it also failed: > GNU Guile 2.2.4.1-cdb19 > Enter `,help' for help. > scheme@(guile-user)> ,use (system foreign) > scheme@(guile-user)> (define str-1 "Hello") > scheme@(guile-user)> (define str-2 "there!") > scheme@(guile-user)> (make-c-struct (list '* '*) (list (string->pointer str-1) > (string->pointer str-2))) $2 = # > scheme@(guile-user)> (parse-c-struct $2 (list '* '*)) > $3 = (# #) > scheme@(guile-user)> (map pointer->string $3) > $4 = ("" "`\v?\x02?U") Here are another couple of examples: scheme@(guile-user)> ,use (system foreign) scheme@(guile-user)> (define str-1 "Hello") scheme@(guile-user)> (define str-2 "there!") scheme@(guile-user)> (make-c-struct (list '* '*) (list (string->pointer str-1) (string->pointer str-2))) $2 = # scheme@(guile-user)> (parse-c-struct $2 (list '* '*)) $3 = (# #) scheme@(guile-user)> (map pointer->string $3) $4 = ("Hello" "there!") But then: scheme@(guile-user)> str-1 $5 = "Hello" scheme@(guile-user)> str-2 $6 = "there!" scheme@(guile-user)> (map pointer->string $3) $7 = ("?\\?q\x7f" " ??E?U") scheme@(guile-user)> (map pointer->string $3) $8 = ("?\\?q\x7f" " ??E?U") I guess that what the GC recollected are the pointers, or even $3, the list Let's hold on it then: scheme@(guile-user)> (define c-struct (make-c-struct (list '* '*) (list (string->pointer str-1) (string->pointer str-2)))) scheme@(guile-user)> (parse-c-struct c-struct (list '* '*)) $9 = (# #) scheme@(guile-user)> (map pointer->string $9) $10 = ("\x02" "0??E?U") Not good either. Let's hold on the parse-c-struct to then: scheme@(guile-user)> (define parsed (parse-c-struct c-struct (list '* '*))) scheme@(guile-user)> parsed $16 = (# #) scheme@(guile-user)> (map pointer->string $16) $17 = ("0??E?U" "?\x01?F?U") scheme@(guile-user)> (map pointer->string parsed) $18 = ("\x03" "?\x01?F?U") Didn't do it either Ok, let's hold-on to the pointers (which I thought would not be necessary after holding-on c-struct and/or parsed): scheme@(guile-user)> (define p1 (string->pointer str-1)) scheme@(guile-user)> (define p2 (string->pointer str-2)) scheme@(guile-user)> (make-c-struct (list '* '*) (list p1 p2)) $19 = # scheme@(guile-user)> (parse-c-struct $19 (list '* '*)) $20 = (# #) scheme@(guile-user)> p1 $21 = # scheme@(guile-user)> p2 $22 = # scheme@(guile-user)> (map pointer->string $20) $23 = ("Hello" "there!") That worked, but I wonder if this is what is expected from us (users)? Cheers, David