连接两个字符串,请大神解释下带问号的3行代码的用处,谢谢
#include <stdio.h>#define MAX 1024
int main()
{
char str1; // 确保连接后不越界
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二格字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要连接的字符个数:");
scanf("%d", &n);
// 将指针指向 str1 的末尾处
while (*target1++ != '\0')
;
// 我们希望 str1 最后边的 '\0' 和 '\n' 都被覆盖掉
target1 -= 2;
while (n--)
{
ch = *target1++ = *target2++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
*target1++ = *target2++;//代码1
*target1++ = *target2++;//代码2
}
}
*target1 = '\0'; //代码3
printf("连接后的结果是:%s\n", str1);
return 0;
} 我c语言学过去就忘的差不多了
我说一下我的看法
可能不对,见谅
代码1和代码2,这里能考虑的是输入汉字的情况,可能是汉字占两个位吧,if条件说的是不在asc码表内
代码3则是在这两个合并后的结果后加上\0
因为字符串都是以\0结尾的嘛 yuedong 发表于 2021-3-9 18:54
我c语言学过去就忘的差不多了
我说一下我的看法
可能不对,见谅
*target1++ = *target2++;这段代码为什么写两遍 鹿酸梅 发表于 2021-3-9 19:15
*target1++ = *target2++;这段代码为什么写两遍
。。。就是猜测汉字占了两个位,每次传递了一半。。我不知道对不对,只是这种猜测 猜测依据是一个汉字占两个字节,相当于两个字母 所以要传递两次,所以这段代码写了两次
页:
[1]