用于将源字符串中的计数字符数从右侧传送到目标字符串的功能

时间:2013-03-08 01:24:35

标签: c

我编写了这个函数,用于将源字符串中的字符数转移到目标字符串。我将字符串传递给src,NULL传递给dst,计数值传递给函数

如果我将输入字符串作为“堆栈溢出”发送并计为4,我希望o / p字符串为“flow”。但是这里我的o / p字符串总是空的,你可以告诉我的逻辑有什么问题。 PLS

char *Rprint(const char *src, char *dst, int count)
{
    int i = 0;
    char *ret = NULL;
    while(*src!= '\0')
        src++;
    dst = malloc(sizeof(char) * (count + 1));
    ret = dst;
    dst = dst + (count + 1);
    while(count)
    {
        *dst++ = *src--;
        count--;
    }
    *dst++ = '\0';
    //return ret;
    printf("String:%s \n", ret);

}

2 个答案:

答案 0 :(得分:0)

我希望你的意思是:

*dst-- = *src--;

我不喜欢你这样做的方式,但如果没有我建议你完全重写你的代码,这应该让你走上正轨。

之后不应该空字符串终止字符串,因为您已经复制了终结符。您正在将字符串从末尾复制到开头(反向复制),但会将其与更常见的正向复制混淆。

小心你的循环条件。你可能有一个一个一个错误。与将count+1添加到dst相同。我认为你应该只添加count

哦,不要忘记从函数中返回一个值!

答案 1 :(得分:0)

以下是基于您原始方法的工作代码,但几乎没有更正。

#include <stdio.h>

void Rprint(const char [], char [], int );


int main()
{
char buff[50] = "stack overflow";
char cut [50];

Rprint(buff,cut,5);
puts(cut);
}


void Rprint(const char src[], char dst[], int count)
{

    while(*src!= '\0')
       src++;

    src = src - count;

    while(count--)
        *(dst++) = *(src++);

    *(dst++) = '\0';

}