|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main(){
char ch1[]="hello";
char ch2[]="world";
char ch3[20];
int i=0,j=0;
printf("%d",sizeof(ch2));
while(ch1[i]!='\0'){
ch3[i]=ch1[i];
i++; //循环结束时i=6;
}
while(ch2[j]!='\0'){
ch3[i+j]=ch2[j]; //ch3[6],ch3[7],ch3[8],ch[9],ch[10],ch[11]
j++; // j=6 hellowowrld也就十个
} //ch3[11]='\0'
ch3[i+j]='\0'; //ch3[i+j]=ch3[12];可是ch3[11]不是结束了吗, 不理解为什么是这样
printf("%s",ch3);
return 0;
}
这段代码的目的是将两个字符串(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[i+j]=ch2[j];。循环结束时,j 的值为 5。
- 在循环结束后,为新字符串添加空字符以表示字符串结束:ch3[i+j]='\0';。这里,i+j 的值为 10,因此空字符将被添加到 ch3[10]。
至于你的疑问,你提到 "ch3[11] 不是结束了吗?",实际上,结束的位置是 ch3[10],而不是 ch3[11]。在第二个循环结束时,j 的值为 5(而不是 6),因此 ch3[10] 是空字符所在的位置。
最后,使用 printf("%s",ch3); 输出合并后的字符串 "helloworld"。
|
|