字符串数组问题有点不理解,求友友们指点一下
#include <stdio.h>int main(){
char ch1[]="hello";
char ch2[]="world";
char ch3;
int i=0,j=0;
printf("%d",sizeof(ch2));
while(ch1!='\0'){
ch3=ch1;
i++; //循环结束时i=6;
}
while(ch2!='\0'){
ch3=ch2; //ch3,ch3,ch3,ch,ch,ch
j++; // j=6 hellowowrld也就十个
} //ch3='\0'
ch3='\0'; //ch3=ch3;可是ch3不是结束了吗, 不理解为什么是这样
printf("%s",ch3);
return 0;
}
//循环结束时i=5;
j=5 结束
ch3='\0'
print("%d\n"i+j); //测试看数据 这段代码的目的是将两个字符串(ch1 和 ch2)连接成一个新的字符串(ch3)。
首先,让我们逐步了解代码的工作原理:
[*]定义三个字符串数组:ch1、ch2 和 ch3。ch1 和 ch2 分别存储 "hello" 和 "world",而 ch3 用于存储合并后的字符串。
[*]初始化两个整数 i 和 j,它们将用于遍历 ch1 和 ch2。
[*]使用 printf("%d",sizeof(ch2)); 输出 ch2 的大小。sizeof() 计算 ch2 的大小(包括空字符),因此输出结果为 6。
[*]第一个 while 循环遍历 ch1,将其每个字符复制到 ch3。循环结束时,i 的值为 5(注意:字符串索引从 0 开始)。
[*]第二个 while 循环遍历 ch2,将其每个字符复制到 ch3,从上一个循环结束时 i 的位置开始。这里的关键是将 ch2 的字符添加到 ch3 中:ch3=ch2;。循环结束时,j 的值为 5。
[*]在循环结束后,为新字符串添加空字符以表示字符串结束:ch3='\0';。这里,i+j 的值为 10,因此空字符将被添加到 ch3。
至于你的疑问,你提到 "ch3 不是结束了吗?",实际上,结束的位置是 ch3,而不是 ch3。在第二个循环结束时,j 的值为 5(而不是 6),因此 ch3 是空字符所在的位置。
最后,使用 printf("%s",ch3); 输出合并后的字符串 "helloworld"。
页:
[1]