萌新求大佬帮助
#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;
}
问题一:ch = *target2++ = *target1++;这句话的意思是不是1目标传给目标2,1目标自加;2目标再传给ch,并且2目标再自加??。
问题二: if ((int)ch < 0)
{
*target2++ = *target1++;
*target2++ = *target1++;
}
if循环内的语句我用堆栈的思想怎么弄都觉的还少一条*target2++ = *target1++;,请问为什么不对呀,我卡在这个地方了,我也想过栈的思想,但是也不对,如下图: 本帖最后由 jackz007 于 2019-4-18 10:16 编辑
1、就是这个意思,你的理解是完全正确的。
2、关于一个汉字几个字节的问题与具体编码有关,比如,在 Windows 系统上,汉字一般采用 ANSI 和 unicode 编码,每个汉字占用 2 个字节,占用 3 个字节的是 utf-8 编码,是 Linux 系统采用汉字编码的标准,这种编码的汉字如不转码,在 Windows 系统会显示成乱码。
其实,只要不是 unicode 编码,字符串拷贝,用下面的 2 行代码足矣:
for(i = 0 ; * target1 && i < n ; i ++) * target2 ++ = * target1 ++ ;
* target2 = '\0' ; jackz007 发表于 2019-4-18 09:28
1、就是这个意思,你的理解是完全正确的。
2、关于一个汉字几个字节的问题与具体编码有关,比如 ...
哦哦,谢谢大佬,我知道了。
页:
[1]