Вот предложение, позволяющее избежать проблемы Художника:
char const *bytes = "tablr=Hello%20World";
char const *bytes2 = "tablr=Hello%20World";
char const *bytes3 = "tablr=Hello%20World";
unsigned int const sz1 = strlen(bytes );
unsigned int const sz2 = strlen(bytes2);
unsigned int const sz3 = strlen(bytes3);
char *concat = (char*)malloc(sz1+sz2+sz3+1);
memcpy( concat , bytes , sz1 );
memcpy( concat+sz1 , bytes2 , sz2 );
memcpy( concat+sz1+sz2 , bytes3 , sz3 );
concat[sz1+sz2+sz3] = '\0';
/* don't forget to free(concat) when it's not needed anymore */
Это позволяет избежать проблемы рисовальщика и должно быть более эффективным (хотя иногда и не так), потому что memcpy может копировать побайтово или пословно, в зависимости от реализации, что быстрее.
Если вы видите здесь шаблон, его можно легко преобразовать в функцию, которая объединяет произвольное количество строк, если они указаны в char const * []
person
amso
schedule
30.08.2011