Next: cbuffers api, Previous: cbuffers buffers, Up: cbuffers [Index]
Generalised C strings are meant to be used in interfaces to foreign C language libraries, when a pointer to C string or input buffer is required as argument.
A generalised C string is an object capable of holding the
representation of a C language string; such Scheme objects are: strings,
bytevectors, pointer objects, instances of memory-block.
(vicare-scheme)Memory blocks for details on memory
blocks.
When a Scheme string is used as generalised C string: the application
must take care of converting the Scheme string into a C string
representation, for example using string->ascii.
When using generalised C strings we have to remember that:
in these cases we should use generalised C buffers, Introduction to generalised C buffers.
Two arguments to function are usually needed to represent a generalised C string: the string value itself and an optional length.
memory-block instance, or pointer object.
#f or an exact integer in the
range of the C language type size_t. When the string argument is
a pointer object: the length argument must represent the number of bytes
available in the referenced memory block; otherwise the length argument
is ignored.
Here is an example function accepting a generalised C string argument
str and its optional length argument str.len, the string is
converted to bytevector with string->ascii:
(define fun
(case-lambda
((str)
(fun str #f))
((str str.len)
(define who 'fun)
(with-arguments-validation (who)
((general-c-string str)
(general-c-string.len str str.len))
(with-general-c-strings
((str^ str))
(do-something-with str^ str.len))))))
Next: cbuffers api, Previous: cbuffers buffers, Up: cbuffers [Index]