Any use of str{,n}cat makes me gag. In the past I have used a composable function that may be of interest. Composable in the sense that the result can be immediately used as an arg to another call and it doesn't have the O(N^2) behavior of strcat. Such a function can be totally safe. Something like:
char* r; r = scpy(char* dst, char* const dst_end, const char* src) where the following post-conditions hold: dst_end >= dst r == MIN(dst + strlen(src)), dst_end) r[0] == '\0' That is, the returned ptr points in `dst' _just_ past the copied data. Note that `dst_end' points to the _last_ char of `dst'. Example: char* string[N]; ... char str[STRSIZE]; char* const strend = str + sizeof str - 1; char* t = str; for (int i = 0; i < N && t < strend; i++) t = scpy(t, strend, string[i]); or scpy(scpy(str, strend, "this"), strend, " and that")); Here is the implementation: char* scpy(char* d, char* const e, const char* s) { while (*s && d < e) *d++ = *s++; *d = '\0'; return d; } This is far too simple to merit a paper or a long name :-) And I am sure a zillion others have come up with the same idea. -- bakul To Unsubscribe: send mail to majord...@freebsd.org with "unsubscribe freebsd-hackers" in the body of the message