马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么我的这个程序,这么写输出的时候少输出一个字母s#include<stdio.h>
9 #include<stdlib.h>
10
11
12 int main(void)
13 {
14 char *ing[5];
15 char *name = "shi";
16 char *fers = "jinl";
17 char *hello = "nishi";
18 char *nnw = "nihao";
19 char *haod = "woshi";
20
21 ing[0] = name;
22 ing[1] = fers;
23 ing[2] = hello;
24 ing[3] = nnw;
25 ing[4] = haod;
26
27
28 while (**ing - 1 != '\0')
29 {
30 *(*ing)++;
31 printf("%c", **ing);
32 }
33
34 return 0;
35 }
这么写却不会少输出s呢int main(void)
13 {
14 char *ing[5];
15 char *name = "shi";
16 char *fers = "jinl";
17 char *hello = "nishi";
18 char *nnw = "nihao";
19 char *haod = "woshi";
20
21 ing[0] = name;
22 ing[1] = fers;
23 ing[2] = hello;
24 ing[3] = nnw;
25 ing[4] = haod;
26
27
28 while (**ing - 1 != '\0')
29 {
30 printf("%c", *(*ing)++);
31 }
32
33 return 0;
34 }
这里面更改的地方是while循环那个地方
求大神给指点
还有如果能德华能顺道说一下,为什么二级指针循环哪里需要减一呢,我只是通过实验弄成减一是可行的,但是原理我我从网上没有查到什么还请大神给指点
首先,你这个写法就很有问题,应该说是不能这样写的。还是给你解释一下,第一个程序:**ing 指向 “shi”字符串中的第一个字符‘s’,
所以**ing - 1并没有什么意义,循环不会退出,*(*ing)++后,这时**ing 指向“shi”中的第二个字符'h',后面才printf,所以第一个程序不会显示字符‘s’;第二个程序可以打出's',是因为*(*ing)++会在printf之后执行。给你个实现的代码吧。 for (int i = 0; i < 5; i++)
{
*ing = ing[i];
while (**ing != '\0')
{
printf("%c", *(*ing)++);
}
printf("\r\n");
}
|