Добавить символ(строку) в char*

Есть вот такое задание

В отдельном модуле реализовать следующие функции:

  • int str_len ( char* s) – возвращает число символов в строке s без учета нулевого символа конца строки.
  • char* str_n_cat ( char* dest, char* source, unsigned int num ) – присоединяет первые num символов строки source к строке dest, если длина строки source больше или равна num, или всю строку source, если длина строки source меньше чем num. Функция возвращает указатель на строку dest. Память для хранения строк source и dest выделяется за пределами функции. В случае невозможности выполнения операции по любым причинам, функция возвращает NULL. При реализации данных функций нельзя использовать стандартные функции для работы со строками

Второе задание решил выполнять таким образом: Поместить в char dop первые num символов строки source, а потом с помощью конкатенации сложить dest и dop. Однако это не получается, так как появляется ошибка.

#include <iostream>
#include <string.h>

using namespace std;

int str_len (char* s)
{
int x = 1;
int len = 0;

while(x)
{
    if (s[len] == 0) {x--;}
    else {len++;}
}

return len;
}

char* str_n_cat(char* dest, char* source, unsigned int num)
{
int count = 0;
char dop[num];

if (str_len(source) >= num)
{
    while(count < num)
    {
        dop[count] = dop[count] + source[count];
        count++;
    }
    dest = dest + dop;
}
}

int main()
{
char* s = "dest";
char* m = "source";

str_n_cat(s, m, 2);
}

Ответы (3 шт):

Автор решения: Harry

Вобщем, я бы делал примерно так:

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";
    }
}
→ Ссылка
Автор решения: Cppeshnik

Как вариант могу предложить следующее:

 #include <iostream>
 using namespace std;  
 //... код 
char* str_n_cat(char* dest, char* source)
    {
       string res = dest;
       res += source;
       return (char*)res.c_str();
    }
→ Ссылка
Автор решения: Aleksandr

Спасибо всем кто помог

Вот код функций, если кому-нибудь будет интересно

    int str_len (char* s) {
    int x = 1;
    int len = 0;

    while(x)
    {
        if (s[len] == 0) {x--;}
        else {len++;}
    }

    return len;
}

char* str_n_cat(char* dest, 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;
}

char* str_n_copy(char* dest, char* source, unsigned int num)
{
    if (!dest || !source)
        return nullptr;

    char* s = source;

    char* t = dest + str_len(dest);

    while(num--) *t++ = *s++;

    if (num == 0) *t = 0;

    return dest;
}
→ Ссылка