C语言在数组后面添加结束符'\0'的小问题~

我觉得很相似的两个程序,为什么第一个不需要加结束符,第二个必须加呢?【1】int fun(int mm,int b[])
{
int k=0;
int i,j;
for(j=1;j<=mm;j++)
{
int p=0;
for(i=2;i<j;i++)
{
if(j%i==0)
p=1;
break;
}
if(!p)
{
b[k++]=j;
}
}
return k;
}该函数的功能是求出小于等于mm的所有素数,放在b数组中,返回素数个数;【2】void fun(char *str,char s[])
{
int i;
int k=0;for(i=0;str[i];i++)
if(i%2==0&&(str[i]-'0')%2==0)
{
s[k++]=str[i];}
【s[k]='\0';】该句在第一个函数中没有出现。
}该函数功能是将str字符串中下标为偶数且ASCII值也是偶数的字符放在s数组中。非常非常感谢~

一个是整型数组,一个是字符数组,不一样的.整型数据不是以\0结束的,而字符数组最后要存放一个\0的.如int a[4],可以存放4个int型数据,如int a[4]={1,2,3,4}char a[4],也可存放4个字符,但最后一个字符得为\0,不然不能正常输入字符串.char a[4]={'a','b','c','\0'},当然'\0'也可以省略,char a[4]={'a','b','c'}但不能是char a[4]={'a','b','c','d'},输出的时候会有乱码,因为没有结束标志.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-28
在字符串数组的末尾加上\0表示字符串结束. 如果没有这个\0,那么在使用系统函数处理这个字符串的时候,函数就不能准确判断字符串在哪里结束.从而导致数组越界.如: 第2个函数中数组如果没有加\0, 则在使用printf 函数打印字符串的时候就会在末尾显示越界后的字符,通常情况下是乱码.
相似回答