答案。。。
本帖最后由 最后的魁拔 于 2019-12-22 18:03 编辑输入我爱lol,拷贝个数3,全都拷贝了,代码是答案的
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int n;
printf("请输入一个字符串到 str1 中:");
fgets(str1, MAX, stdin);
printf("请输入需要拷贝的字符个数:");
scanf("%d", &n);
printf("开始拷贝 str1 的内容到 str2 中...\n");
while (n--)
{
ch = *target2++ = *target1++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
*target2++ = *target1++;
*target2++ = *target1++;
}
}
*target2 = '\0';
printf("拷贝完毕!\n");
printf("现在,str2 中的内容是:%s\n", str2);
return 0;
} 本帖最后由 Tec 于 2019-12-22 18:31 编辑
你的源代码也发一下啊 本帖最后由 jackz007 于 2019-12-22 18:40 编辑
如果在 linux 系统上运行,这个代码是正确的,如果是在 Windows 平台上,代码要做调整:
if ((int)ch < 0)
{
*target2++ = *target1++;
*target2++ = *target1++;// 在 Windows 平台上必须删除这条语句;
} Tec 发表于 2019-12-22 18:29
你的源代码也发一下啊
上面就是,截图就是答案测试的
jackz007 发表于 2019-12-22 18:35
如果在 linux 系统上运行,这个代码是正确的,如果是在 Windows 平台上,代码要做调整:
中文,占2个字节,是不是因为while循环下,第一步已经加一了 jackz007 发表于 2019-12-22 18:35
如果在 linux 系统上运行,这个代码是正确的,如果是在 Windows 平台上,代码要做调整:
请问上面代码的37行,它应该是再字符串的末尾加结束符,但是我看不懂,能讲讲吗? 本帖最后由 jackz007 于 2019-12-23 09:17 编辑
最后的魁拔 发表于 2019-12-23 08:56
请问上面代码的37行,它应该是再字符串的末尾加结束符,但是我看不懂,能讲讲吗?
前面的 * target2 ++ = * target1 ++ 语句每次复制完字符后,两个指针(target1、target2)都会步进,如果是通过条件 if(ch == '\n') 结束的循环,那么,字符复制已经覆盖了结束标志,就是说,str1 的结束符已经拷贝到 str2 中;但是,如果是通过 while (n --) 结束的循环,字符复制肯定还没有能够覆盖到结束符,这个时候,显然就必需专门为 str2 添加字符串结束符了,第 37 句代码就是专门做这件事情的。 jackz007 发表于 2019-12-23 09:13
前面的 * target2 ++ = * target1 ++ 语句每次复制完字符后,两个指针(target1、target2)都会 ...
那请问*target2='\0'是如何准确定位到末尾再加结束符的呢 最后的魁拔 发表于 2019-12-23 10:38
那请问*target2='\0'是如何准确定位到末尾再加结束符的呢
* target2 是最后复制的那个字符
* (target2 + 1) 自然就是结束符的位置,这个很难理解吗? jackz007 发表于 2019-12-23 10:50
* target2 是最后复制的那个字符
* (target2 + 1) 自然就是结束符的位置,这个很难理解吗?
好的谢谢
页:
[1]