鱼C论坛

 找回密码
 立即注册
查看: 866|回复: 2

[已解决]字符串数组问题有点不理解,求友友们指点一下

[复制链接]
发表于 2023-4-1 23:24:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2023-4-2 00:07:06
这段代码的目的是将两个字符串(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"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-2 00:06:58 | 显示全部楼层


//循环结束时i=5;

j=5 结束
ch3[5+5]='\0'
print("%d\n"i+j); //测试看数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-2 00:07:06 | 显示全部楼层    本楼为最佳答案   
这段代码的目的是将两个字符串(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"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表