C语言数组初始化,赋值和'\0'相关的问题

#include<stdio.h>#include<ctype.h>#defineSIZE100main(){intGetint(int*);/*Getint是通过指针修... #include<stdio.h>
#include<ctype.h>
#define SIZE 100

main()
{
int Getint(int *);/*Getint是通过指针修改array的,返回的是读入的字符*/
int array[SIZE];
int i;
for(i=0;i<SIZE;i++)/*初始化数组*/
array[i]=0;
for(i=0;i<SIZE&&Getint(&array[i])!='\n';i++)
;
for(i=0;array[i]!='\0';i++)/*如果这里判断条件是i<SIZE,则多余的0会打印*/
printf("%d\n",array[i]);/*出现错误的数字是因为没有初始化*/

}

int getch(void);
void ungetch(int);

int Getint(int *pn)
{
int c,sign;
while(isspace(c=getch()))
;
if(!isdigit(c)&&c!=EOF&&c!='+'&&c!='-')
{
ungetch(c);/*c不是数字,压入缓冲区*/
return 0;/*返回0,则进行逻辑判断的时候为非*/
}
sign=(c=='-')?-1:1;/*当遇到负号时,把sign赋值为-1*/
if(c=='+'||c=='-')/*当遇到正负号时*/
c=getch();/*读入下一个字符*/
for(*pn=0;isdigit(c);c=getch())/*如果是数字,则开始给*pn赋值*/
*pn=(*pn)*10+(c-'0');/*把连续的数字字符组成int*/
*pn *=sign;
if(c!=EOF)
ungetch(c);
return c;
}
#define BUFSIZE 10
char buf[BUFSIZE];
int bufp=0;
int getch(void)
{
return (bufp>0)?buf[--bufp]:getchar();
}

void ungetch(int c)
{
if(bufp>=BUFSIZE)
printf("error:buf is full\n");
else
buf[bufp++]=c;
}

代码是这样的。

主函数通过调用Getint函数,来给数组赋值
我现在的问题是
如果不给数组初始化,则会打印一些奇怪的东西,所以必须要初始化吗?
如果给数组初始化,全部赋值为0,那么系统是会在什么地方添加'\0',末尾是吗?
for(i=0;array[i]!='\0';i++)
printf("%d\n",array[i]);
问题是,如果这里判断条件是i<SIZE,则多余的0会打印,而如果是array[i]!='\0',则只会打印赋值过的数,请问这个’\0'是在什么位置?是赋值后添加的而不是初始化后末尾的‘\0'?
展开
 我来答
ry_x
2013-06-22 · TA获得超过941个赞
知道小有建树答主
回答量:1095
采纳率:0%
帮助的人:735万
展开全部
你如果在定义的时候就初始化,比如
char array[10] = "Hello";
int a[10] = {1};
就已经将没设置值的元素默认置0。
比如array的 5-9 , a 的 1-9 (从0开始)
初始化是个好习惯

定义时候不初始化,而且不是全局变量,结果就未知了。
更多追问追答
追问
那初始化之后,再对数组赋值。
比如
一个数组a[10],我给他所有元素初始化为0,那结束符不是应该在末尾嘛
然后我再给数组的前5个元素赋值为1,那么打印的时候,遇到结束符停止,不应该是
1111100000吗?
而我这里就是打印11111
追答
你说的都是字符数组吧?
字符串以'\0'结尾,是说从前往后碰到'\0'就认为字符串到这里截止了,后面的元素是什么无关紧要。
手机用户74930
2013-06-22 · 超过14用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:45.7万
展开全部
初始化的0吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式