请各位c语言高手点拨下小菜我!!!

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:19:14
#include<stdio.h>
#include<conio.h>
void main()
{int i;
char a[]="i am a girl",b[20],*p,*q;
clrscr();
p=a;
q=b;
for(i=0;*(p+i)!='\0';i++,p++,q++)
{*q=*p;
printf("%c",b[i]);
}
}
为什么运行出来是i am a girl和一群乱码?和我没写b[i]最后的'\0'有关系吗,请各位高手帮帮我!

for(i=0;*(p+i)!='\0';i++,p++,q++)
这一句,i和p同时增长,也就是说你在判断串a的奇数位置的字符是否为0,不巧,这个串的0在偶数位置,所以没有检测到,而是不断往后查找。。。

将条件
*(p+i)!='\0'
修改为:
*p != 0 或者 a[i] != 0
就可以了。

你的p每次都++过了,*(p+i)实际上是每次跳2位了

b的大小是20,而a只有12,空出来的8个没有初始化,就是乱码咯,你试试改变数组b的大小 不过我在vs2005下测试没问题,和编译器也有关系

有关系,没加'\0'就会这样