用C写一个字符串中继器会产生多余的字符

时间:2018-07-27 08:04:19

标签: c string repeat chars

我正在尝试让自定义字符串中继器在C中工作。它可用于某些输入,在其他情况下,它会附加不需要的字符。在我看来,malloc在某些情况下分配了过多的内存,但是我不太清楚为什么。

示例:

repeater("hi", 2) -> hihi

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

代码:

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 个答案:

答案 0 :(得分:-1)

您不需要长度函数,strlen已经为您做到了,并且它不包含终止的空字符。

因此 len = length(str); 变为 len = strlen(str);

您需要string.h lib来使用它。

查看此在线版本以查看更改:https://www.jdoodle.com/embed/v0/AiA