关于字符数组输出中++i和i++有关问题
关于字符数组输出中++i和i++问题。
char s1[38]="www.yjxsoft";
char s2[]=".com";
int i,j;
i=j=0;
//计算 s1的长度,当s1[i]不为0时一直循环,直到s1[i]==0时退出循环,从而移到s1字符串末尾 也就是s[i]=='\0'处
while(s1[++i]);
printf("%d\n",i);
//当j下标未指向'\0'时 逐一复制字符至s1末尾
while (s2[j])
{
s1[i++]=s2[j++]; //这里用后置++表示 先对s1[i]=s2[j]后 才对i和j进行自增1操作
}
printf("%s \n",s1);
红字处换位i++就不行了,按理说换成i++只会比++i多出一个空字符啊,为啥不行呢?求教
------解决方案--------------------
i = 0;
while(s1[i++]);
//s1[i-1] == '\0', s[i]也等于'\0'
int tmp = i - 1;
while (s2[j])
{
s1[i++]=s2[j++]; //这里用后置++表示 先对s1[i]=s2[j]后 才对i和j进行自增1操作
}
//这样s1中间s1[tmp]为'\0',字符穿到这里结束了
------解决方案--------------------
++i是先使i自身+1然后再取值,所以while(s1[++i]);第一次读到的是s1[1]不是s[0],最后一个读到的'\0'时,i正好在这个位置上。
如果是i++的话,先取值后+1,那么开始是s[0],当s[i++]为'\0'时,i会在'\0'的下一个位置上,所以需要在while循环后,进行i--
------解决方案--------------------
空字符代表结束吧~~后面不应该有字符了~~个人理解~~
char s1[38]="www.yjxsoft";
char s2[]=".com";
int i,j;
i=j=0;
//计算 s1的长度,当s1[i]不为0时一直循环,直到s1[i]==0时退出循环,从而移到s1字符串末尾 也就是s[i]=='\0'处
while(s1[++i]);
printf("%d\n",i);
//当j下标未指向'\0'时 逐一复制字符至s1末尾
while (s2[j])
{
s1[i++]=s2[j++]; //这里用后置++表示 先对s1[i]=s2[j]后 才对i和j进行自增1操作
}
printf("%s \n",s1);
红字处换位i++就不行了,按理说换成i++只会比++i多出一个空字符啊,为啥不行呢?求教
------解决方案--------------------
i = 0;
while(s1[i++]);
//s1[i-1] == '\0', s[i]也等于'\0'
int tmp = i - 1;
while (s2[j])
{
s1[i++]=s2[j++]; //这里用后置++表示 先对s1[i]=s2[j]后 才对i和j进行自增1操作
}
//这样s1中间s1[tmp]为'\0',字符穿到这里结束了
------解决方案--------------------
++i是先使i自身+1然后再取值,所以while(s1[++i]);第一次读到的是s1[1]不是s[0],最后一个读到的'\0'时,i正好在这个位置上。
如果是i++的话,先取值后+1,那么开始是s[0],当s[i++]为'\0'时,i会在'\0'的下一个位置上,所以需要在while循环后,进行i--
------解决方案--------------------
空字符代表结束吧~~后面不应该有字符了~~个人理解~~