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'? 展开
#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'? 展开
展开全部
你如果在袜亮定义的时候就初始化,比如燃好老
char array[10] = "Hello";
int a[10] = {1};
就已经将没设置值的元素皮升默认置0。
比如array的 5-9 , a 的 1-9 (从0开始)
初始化是个好习惯
定义时候不初始化,而且不是全局变量,结果就未知了。
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'就认为字符串到这里截止了,后面的元素是什么无关紧要。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询