一个让人郁闷的程序,请高手赐教
以下是我编写的一个小程序,让字母返回ASCII玛的数字,但是返回的时候莫名其妙的多了一些字符,程序如下:
#include <stdio.h>
main()
{ char *p,*q,a[20]= "abc ",b[20];
p=a; q=b;
for(;*p!= '\0 ';p++,q++)
{ if( *p> = 'a ' && *p < 'j ')
*q=*p-48;
puts(b);
}
}
"abc "应该返回“123”但是结果是“123◆H”,如果是“abcdef”返回的就是“12345”又正确,好象是返回的位数必须够五位,不然就给后面添加了字符。我郁闷坏了,请那位高手不吝赐教
[解决办法]
char *p,*q,a[20]= "abc ",b[20];
改为!
char *p,*q,a[20]= "abc ",b[20] = { '\0 '};
[解决办法]
数组b没有初始化,里面的值不定。循环:数组a的元素不是串结束符的话,就给数组b的元素赋值。当数组a的元素是串结束符时,循环结束。puts会遇到串结束符才停止输出,但因为b数组的值不定,所以会产生一些其它字符的输出。当b数组先初始化,那么必定在循环结束后的第一个字符就是 '\0 ',所以不会有别的字符输出