C/Strncatf
From Attie's Wiki
(Difference between revisions)
m |
|||
Line 1: | Line 1: | ||
− | + | This is a variation of <code>strcat()</code> with a few important differences / improvements: | |
− | This is a variation of | + | * allows you to pass a formatted string like <code>printf()</code> |
− | * allows you to pass a formatted string like | + | * takes a max length for dest, not for how much of src to use (like <code>strncat()</code>) |
− | * takes a max length for dest, not for how much of src to use (like | + | * returns a pointer to the <code>\0</code> at the end of dest after the operation. |
− | * returns a pointer to the | + | |
− | + | <source lang="c"> | |
char *strncatf(char *dest, int length, char *format, ...) { | char *strncatf(char *dest, int length, char *format, ...) { | ||
char buf[4096]; | char buf[4096]; | ||
Line 14: | Line 13: | ||
length -= strlen(dest); | length -= strlen(dest); | ||
strncat(dest,buf,length-1); | strncat(dest,buf,length-1); | ||
− | return & | + | return &dest[strlen(dest)]; |
} | } | ||
− | + | </source> |
Revision as of 20:25, 20 December 2010
This is a variation of strcat()
with a few important differences / improvements:
- allows you to pass a formatted string like
printf()
- takes a max length for dest, not for how much of src to use (like
strncat()
) - returns a pointer to the
\0
at the end of dest after the operation.
char *strncatf(char *dest, int length, char *format, ...) { char buf[4096]; va_list ap; va_start(ap,format); vsnprintf(buf,sizeof(buf),format,ap); va_end(ap); length -= strlen(dest); strncat(dest,buf,length-1); return &dest[strlen(dest)]; }