下面程序是用指针法将一个字符串a复制到字符串b中,修改程序实现问题(1)(2)。

下面程序是用指针法将一个字符串a复制到字符串b中,修改程序实现问题(1)(2)。并写出重要变量用途说明

main()
{
char a[]="I am a boy.",b[20], *p1,*p2;
int i;
p1=a;p2=b;
for( ; *p1!=’\0’;p1++,p2++)
*p2=*p1;
*p2=’\0’;
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!=’\0’;i++)
printf("%c",b[i]);
}

(1)将第一个for循环改为while循环;
(2)分别用指针变量p1和p2输出字符串a 和b。

根据你的要求,这是修改后的代码:

#include <stdio.h>

int main()
{
    char a[] = "I am a boy.", b[20], *p1, *p2;
    p1 = a; p2 = b;

    while(*p1 != '\0') {   // 将for循环改为while循环
        *p2 = *p1;
        p1++; p2++;
    }

    *p2 = '\0';

    printf("string a is: %s\n", a);

    printf("string b is: %s\n", b);  // 用指针变量p2输出字符串b

    return 0;
}

在上述代码中:

  • a 是我们要复制的原始字符串。
  • b 是我们要复制到的目标字符串的数组。
  • *p1 是一个指向字符串 a 的指针,我们将使用它来遍历字符串 a
  • *p2 是一个指向字符串 b 的指针,我们将使用它来遍历字符串 b

while循环将遍历字符串 a,直到遇到null字符为止。在每次循环中,它都会将 p1 所指向的字符复制到 p2 所指向的位置,并递增 p1p2,以便在下一次循环中移动到下一个字符。

最后,我们在字符串 b 的末尾添加了一个null字符,以确保它是一个正确的C字符串。

请注意,这个版本的程序假设字符串 a 的长度不会超过 b 的长度。如果 a 的长度大于 b 的长度,那么这个程序会导致缓冲区溢出。

供参考:

#include <stdio.h>
int main()
{
    char a[] = "I am a boy.", b[20], *p1, *p2;

    p1 = a; p2 = b;
    while(*p1 != '\0')  *p2++ = *p1++;
    *p2 = '\0';

    p1 = a; p2 = b;
    printf("string a is: %s\n", p1);
    printf("string b is: %s\n", p2);
    return 0;
}


int main()
{
    char a[] = "I am a boy.";//字符数组
    char b[20];//字符数组,用来存放a复制过来的内容
    char* p1;//字符指针
    char* p2;
    int i;
    p1 = a;//数组名表示首元素的地址
    p2 = b;
    //最后要求是要用指针打印出字符串
    //那么,我们的p1和p2就不能动
    //如果一直移动的话,就不是数组首元素的地址了
    //所以需要再定义两个字符指针,来移动
    char* s1 = a;
    char* s2 = b;
    while (*s1 != '\0')
    {
        *s2 = *s1;
        s1++;
        s2++;
        *s2 = '\0';
    }
    printf("string a is:%s\n", p1);
    printf("string b is:%s\n", p2);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:指向数组元素的指针变量p实现二维数组a中各元素的输入、升序排列和输出 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: C语言基础编程题(位操作训练)中的 2.输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的第p1到p2位 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    
    void binary_out(int n, int start, int end);
    
    int main() {
        int x = 4 + 16 + 64;//0101 0100B
    
        binary_out(x, 2, 6);
    
        return 0;
    }
    
    void binary_out(int n, int start, int end) {
        n = n >> start;
    
        for (int i = 0; i < end -start + 1; i++) {
            printf("%d", (n & 0x1) ? 1 : 0);
            n = n >> 1;
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^