#include <iostream>
using namespace std;
unsigned int str_len(const char* s)
{
if (!s) throw invalid_argument("nullptr in str_len()");
unsigned int l = 0;
while(*s++) ++l;
return l;
}
char* str_n_cat(char* dest, const char* source, unsigned int num)
{
if (!dest || !source) return nullptr;
char * t = dest + str_len(dest);
while(num-- && (*t++ = *source++));
if (num == 0) *t = 0;
return dest;
}
int main()
{
for(int n = 0; n < 10; ++n)
{
char s[20] = "dest";
char m[] = "source";
cout << "[" << str_n_cat(s, m, n) << "]\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdW5zaWduZWQgaW50IHN0cl9sZW4oY29uc3QgY2hhciogcykKewogICAgaWYgKCFzKSB0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJudWxscHRyIGluIHN0cl9sZW4oKSIpOwogICAgdW5zaWduZWQgaW50IGwgPSAwOwogICAgd2hpbGUoKnMrKykgKytsOwogICAgcmV0dXJuIGw7Cn0KCmNoYXIqIHN0cl9uX2NhdChjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGludCBudW0pCnsKICAgIGlmICghZGVzdCB8fCAhc291cmNlKSByZXR1cm4gbnVsbHB0cjsKICAgIGNoYXIgKiB0ID0gZGVzdCArIHN0cl9sZW4oZGVzdCk7CiAgICB3aGlsZShudW0tLSAmJiAoKnQrKyA9ICpzb3VyY2UrKykpOwogICAgaWYgKG51bSA9PSAwKSAqdCA9IDA7CiAgICByZXR1cm4gZGVzdDsKfQoKaW50IG1haW4oKQp7CiAgICBmb3IoaW50IG4gPSAwOyBuIDwgMTA7ICsrbikKICAgIHsKICAgICAgICBjaGFyIHNbMjBdID0gImRlc3QiOwogICAgICAgIGNoYXIgbVtdICAgPSAic291cmNlIjsKICAgICAgICBjb3V0IDw8ICJbIiA8PCBzdHJfbl9jYXQocywgbSwgbikgPDwgIl1cbiI7CiAgICB9Cn0K