我已经编写了这个函数来从源字符串到目标字符串从右转移count个字符。我正在传递字符串到src, NULL到dst和计数值到函数
如果我发送输入字符串为"Stack overflow"并计数为4,我希望o/p字符串为"flow"。但是这里我的o/p字符串总是空的,你能告诉我我的逻辑出了什么问题吗?请
char *Rprint(const char *src, char *dst, int count)
{
int i = 0;
char *ret = NULL;
while(*src!= ' ')
src++;
dst = malloc(sizeof(char) * (count + 1));
ret = dst;
dst = dst + (count + 1);
while(count)
{
*dst++ = *src--;
count--;
}
*dst++ = ' ';
//return ret;
printf("String:%s n", ret);
}
我想你是有意这么做的:
*dst-- = *src--;
我不喜欢你做这件事的方式,但这应该让你走上正轨,而不是我建议你完全重写你的代码。
之后不应该以空结束字符串,因为您已经复制了终止符。您正在从末尾复制字符串到开始(即反向复制),但将其与更常见的正向复制混淆。
小心你的循环条件。这里可能有一个差1的误差。将count+1
加入dst
也是一样。我认为你应该只添加count
。
哦,别忘了从你的函数返回一个值!
下面是工作代码,基于您最初的方法,但做了一些修改。
#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!= ' ')
src++;
src = src - count;
while(count--)
*(dst++) = *(src++);
*(dst++) = ' ';
}