如何处理for循环中的指针

时间:2019-04-25 12:34:04

标签: c

这将引发一个错误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++;
    }

1 个答案:

答案 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];
}

这样更干净,使用您的代码的人会喜欢它的。