这会抛出一个错误 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++;
}
最佳答案
这里的检查是错误的:
if(i!=strlen(str1))
当 i
大于 strlen(str1)
时,它会再次变为 false,但它应该保持 true。将其更改为:
if (i < strlen(str1))
此外,您不会在 else
block 中增加 i
。这将导致 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];
}
这种方式更加简洁,使用您的代码的人会欣赏它。
关于c - 如何处理for循环中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849410/