-1

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

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

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);

}
4

2 回答 2

0

我希望你打算这样做:

*dst-- = *src--;

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

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

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

哦,别忘了从你的函数中返回一个值!

于 2013-03-08T01:50:48.060 回答
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';

}
于 2013-03-08T03:13:08.087 回答