c - 如何处理for循环中的指针

标签 c string loops pointers strlen

这会抛出一个错误 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/

相关文章:

c - 任何 gcc 选项可以像 "int i[]"一样对待 "int *i"吗?

c++ - C++中的字符串比较

c - 从文件中读取,输出只显示一行

C# 对象到字符串并返回

c - 需要帮助查找错误,如果字符串输入由所有相同字符组成,则输出字符已损坏

java - 构造函数的循环方法

java - ActionListener 和 for 循环

c - 限制与服务器不工作的最大连接数

c - 为什么我的整数数组元素包含错误的值,当我在 C 中为其分配字符值时,我该如何解决这个问题?

c - while 循环中的增量不起作用?