There are quite a few places in the pjsip code where it is assumed that an snprintf of "%.*s" will nicely print nothing if the supplied arguments are 0 and NULL. For example, in pjsua_acc.c there is: len = pj_ansi_snprintf(tmp, PJSIP_MAX_URL_SIZE, "<sip:%.*s%s%s%.*s%s:%d;transport=%s%.*s>%.*s", (int)acc->user_part.slen, acc->user_part.ptr, (acc->user_part.slen? "@" : ""), beginquote, (int)via_addr->slen, via_addr->ptr, endquote, rport, tp->type_name, (int)acc->cfg.contact_uri_params.slen, acc->cfg.contact_uri_params.ptr, (int)acc->cfg.contact_params.slen, acc->cfg.contact_params.ptr); ... and by default acc->cfg.contact_uri_params and acc->cfg.contact_params both have 0 lengths and NULL pointers. This is very convenient when it works but sadly is not a feature of C libraries that one can count on, which makes the code less than portable. In my case, i'm using a version of uclibc that prints "(null)" whenever the pointer is NULL, regardless of the "precision" argument. Modifying uclibc is a possible work around for me, although it means i have to fork a version of uclibc which will make it hard to track their latest version... which won't make people i work with happy. I suggest that all such cases in the pj code be slightly rewritten so that "" is substituted where "ptr" is NULL. This can best be done with a wrapper inline function which we already have in pj/string.h !!! : PJ_INLINE(const char*) pj_strbuf( const pj_str_t *str ) { return str->ptr; } used as: pj_strbuf(&acc->cfg.contact_params) To generalize, it would be better if the fields of pj_str_t were accessed only by standard access functions pj_strbuf() and pj_strlen() already provided in pj/string.h , and never directly as is the case in so much of the pj code... however, fixing the snprintfs would be a good start. Thanks a lot for pjsip, -Ted Merrill