啊这啧啧啧 发表于 2023-4-1 23:24:33

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

#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;
}

ba21 发表于 2023-4-2 00:06:58



//循环结束时i=5;

j=5 结束
ch3='\0'
print("%d\n"i+j); //测试看数据

isdkz 发表于 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=ch2;。循环结束时,j 的值为 5。

[*]在循环结束后,为新字符串添加空字符以表示字符串结束:ch3='\0';。这里,i+j 的值为 10,因此空字符将被添加到 ch3。


至于你的疑问,你提到 "ch3 不是结束了吗?",实际上,结束的位置是 ch3,而不是 ch3。在第二个循环结束时,j 的值为 5(而不是 6),因此 ch3 是空字符所在的位置。

最后,使用 printf("%s",ch3); 输出合并后的字符串 "helloworld"。
页: [1]
查看完整版本: 字符串数组问题有点不理解,求友友们指点一下