Writing a string repeater in C produces unwanted chars

94 Views Asked by At

I'm trying to get a custom string repeater to work in C. It works for some input, and in other cases, it appends unwanted characters. It seems to me malloc in some cases allocates too much memory, but I don't quite grasp why.

Examples:

repeater("hi", 2) -> hihi

repeater("yeah", 4) -> yeahyeahyeahyeah?f{??

The code:

int length(char* str)
{
    int i;
    if(str == NULL)
        return 0;
    for(i = 0; *(str+i) != '\0'; ++i);
    return i;
}

char* repeater(char* str, int times)
{
    char* out;
    int i,len,sz;
    len = length(str);
    sz = len * times;
    out = (char*)malloc(sz * sizeof(char));
    for(i = 0; i < sz; i++)
        *(out+i) = *(str + (i % len));   
    return out;
}
1

There are 1 best solutions below

1
Maximilien Nowak On

You don't need the length function, strlen already do that for you AND it dont include the terminating null character.

so len = length(str); become len = strlen(str);

You need the string.h lib to work with it.

Look at this online version to see the change : https://www.jdoodle.com/embed/v0/AiA