我编写了这个函数,用于将源字符串中的字符数转移到目标字符串。我将字符串传递给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);
}
答案 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';
}