下面程序是用指针法将一个字符串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
所指向的位置,并递增 p1
和 p2
,以便在下一次循环中移动到下一个字符。
最后,我们在字符串 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);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#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;
}
}