这将引发一个错误ID,返回1个错误状态。循环正常工作,但我无法打印最终的串联字符串。当我尝试打印最终字符串时,它什么也没做。
char str1[50], str2[50], str[100];
char *p1, *p2, *p3;
int i = 0, j = 0;
p1 = &str1[0];
p2 = &str2[0];
p3 = &str[0];
printf("enter a string:");
gets(str1);
printf("enter a string:");
gets(str2);
while (i <= strlen(str1) + strlen(str2)) {
if (i != strlen(str1)) {
*(p3 + i) = *(p1 + i);
i++;
} else {
*(p3 + i) = *(p2 + j);
j++;
}
答案 0 :(得分:1)
此检查不正确:
if(i!=strlen(str1))
当i
大于strlen(str1)
时,它将再次变为false,但是应该保持为真。更改为此:
if (i < strlen(str1))
此外,您不会在i
块中增加else
。这将导致不断增长的j
造成无限循环,至少直到未定义的行为可能导致您的程序退出(可能是由于访问冲突)。尝试以下方法:
else {
*(p3 + i) = *(p2 + j);
i++; // increase i in both cases
j++;
}
或更妙的是,使其成为无条件的。例如,您可以将i++
移出正文,将循环更改为此:
for (i = 0; i <= strlen(str1) + strlen(str2); i++)
此外,我是否可以对数组下标表示法感兴趣?代替这个:
if (i < strlen(str1)) {
*(p3 + i) = *(p1 + i);
}
执行以下操作:
if (i < strlen(str1)) {
p3[i] = p1[i];
}
这样更干净,使用您的代码的人会喜欢它的。