将一个含n个字符的字符串从第m个字符开始的全部字符复制成另一个字符串,为什么结果少最后一个字符?

Bpf345 2015-05-16 10:50:42
#include<stdio.h>
void copy(char *p1,int m,int n);
int main()
{int m,n,i;
char s1[20];
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%c",&s1[i]);
copy(s1,m,n);
return 0;}
void copy(char *p1,int m,int n)
{int i;
for(i=m;i<n;i++)
printf("%c",*(p1+i));}
...全文
951 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
guicaisa 2015-05-16
  • 打赏
  • 举报
回复
上面有个地方讲错了啊。。。“证据就是在你的输出代码中并没有任何换行符,但是输出内容却自动换行了。”这句话是错的,,我脑残了,,请自动过滤,,。。
guicaisa 2015-05-16
  • 打赏
  • 举报
回复

# include <stdio.h>

void copy(char *, int, int);

int main(void)
{
	int n, m;
	int i;
	char str[20] = {0};
	printf("enter num\n");
	scanf("%d %d", &n, &m);
	getchar();
	
	for (i = 0; i < n; i++)
	{
		scanf("%c", &str[i]);
	}
	copy(str, m, n);

	return 0;
}

void copy(char * str, int m, int n)
{
	int i;
	for (i = m-1; i < n; i++)
		printf("%c", str[i]);
	printf("\n");
}
问题出在你输入数字之后按下的那个回车,被下面循环中的获取字符操作,存在了字符数组里,你看上去输入的是qwerty,其实应该是\nqwert并没有Y。你传进去的参数m是2,在数组中是第三个元素,即w,所以输出的内容是wert。证据就是在你的输出代码中并没有任何换行符,但是输出内容却自动换行了。在scanf2个数字之后使用getchar()接住换行符,或者使用flushall()清空缓冲区即可。 引用赵老师的名言,F9加断点,F5执行,F10单步执行,自己观察监视器中各个变量的实时数据,进行推测哪里出错了。然后F11进入函数什么的,后面的我不会编了。好了就说到这里,不知道我上面的解答有没什么错误,后续跟上即可。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧