Passing strings between C and PL/I

C and PL/I have different string data types:
C strings
Logically unbounded length and are terminated by a NULL (the last byte of the string contains X'00').
PL/I CHAR(n) VARYING
A halfword-prefixed string of characters with a maximum length n characters. The current length is held in the halfword prefix.
PL/I CHAR(n) VARYINGZ
A null-terminated string of characters with a maximum length of n characters.
PL/I CHAR(n)
A fixed-length string of characters of length n. There is no halfword prefix indicating the length.

You can pass strings between C and PL/I routines, but you must match what the routine interface demands with what is physically passed.