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

#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'?

你如果在定义的时候就初始化,比如
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'就认为字符串到这里截止了,后面的元素是什么无关紧要。

追问

也就是说整型数组没有‘\0'这种东西存在是么?

追答

整形就是0…… '\0'表示一个字符。
再说C标准也没有定义整形数组的输出方式,不涉及这个问题。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-22
初始化的0吧

C语言数组初始化,赋值和'\\0'相关的问题
char array[10] = "Hello";int a[10] = {1};就已经将没设置值的元素默认置0。比如array的 5-9 , a 的 1-9 (从0开始)初始化是个好习惯 定义时候不初始化,而且不是全局变量,结果就未知了。

关于C语言字符数组的赋值最后自动添加‘\\0’问题
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。所谓自动加'\\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的...

关于C语言字符数组初始化的问题?如 char str[256]={'\\0'};,除str[0]
每一个都是都是字符'\\0'哦。这是运行结果哦。

C语言字符串问题
1. 字符串初始化,如果逐个赋值的话,系统不一定会自动添加'\\0',除非指定了长度且指定的长度大于等于你赋值的字符的个数加1,即最小为你赋值的字符个数加1。假设你指定的字符个数为n,长度为len,则系统会将剩下的(len-n)个元素都赋值为'\\0',当n等于len时,不会添加任何'\\0'。之所以出现...

C语言关于数组赋初值的问题char buff[10]={0};
void main { char buff[5]={0};printf("%s",buff);} 是没有任何输出的,因为printf遇到的buff的第一个字符就是个字符串的结束符'\\0'而如果这样写:include <stdio.h> void main { char buff[5]={'0'};printf("%s",buff);} 才会看到输出了一个'0'这才是你理解的给第一个单元赋值为...

c语言问题?
一、你的表述不清楚,因为字符变量和字符串变量是存放字符的,所以不管赋值还是初始化,都要放上一个字符。1、在c语言中,字符是用单引号括起来的一个字符,如'a'、'8'、'#'等。2、在c语言中,字符还可以是用转义符引导的一个或几个字符,如'\\n'、'\\0'、'\\%'以及'\\040'或'\\x30'等等,...

c语言,字符型数组初始为‘\\0’,这个代表什么?是什么意思?
字符串由'\\0'空字符表示字符串结束。上来就遇到结束的空字符,说明这个字符串是个空串,由1个字符组成,长度为0,占1字节

C语言在数组后面添加结束符'\\0'的小问题~
一个是字符数组,不一样的.整型数据不是以\\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'也可以省略,...

c语言中b[5]={'\\0'}什么意思?
很明显,这是在对数组b[5]进行初始化,具体操作的细节需要根据数组b[5]的数据类型而定;1.整形数组:所有的数组元素的值都会被初始化为整数0。2.字符型数组:所有的数组元素的值都会被初始化为字符'\\0'。

C语言‘\\0’的问题
因为‘\\0’之存在于字符串的结束处中,你输入的数据不是以字符串的方式存在。而且键盘无法捕获‘\\0’字符 如果想捕获一行的末尾只能这样 for(int i=0;i<50;i++){ a[i]=getchar();if(a[i]=='\\n'){break;i--;} }

相似回答