c语言,字符数组中最后一个字必须为‘\0’,为什么错?

作者&投稿:友储 (若有异议请与网页底部的电邮联系)
C语言中,为什么有的字符数组要后面要加\0,有的不要加?~

这个程序此处不加也没有问题的。因为接下来是先gets(str);然后再使用的。
在函数内部定义的变量或数组,都是要先经过赋值后才能运用的,否则其中的值不确定。如果在程序代码中先经过赋值后再应用,那么在声明变量时可以不赋初值的。

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。
因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

扩展资料:
说明:
把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};
实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\0'
这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。
个案
1. 当数组长度不够。假设我们指定了数组长度,如:u8 str1[13]={"cxjr.21ic.org"};由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。
2. 如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望数组以'\0'结束,则可以写成以下三者之一:
(1)u8 str1[]={"cxjr.21ic.org"}; //字符串赋值
(2)u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; //人工添加
(3)u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; //故意给数组预留一个空位
参考资料来源:百度百科-字符串

c语言中字符数组并没有规定最后一个字符为'\0',甚至可以不包含'\0',添加'\0'作为结束标志是针对于c语言对字符串的处理而言的,因此,字符数组中最后一个字必须为‘\0’是错误的。

C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0'作为结束标志 。

例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素。这样的字符数组长度为8,并没有在最后添加'\0'符号,但其初始化是完全正确的。

扩展资料:

C语言对'\0'结束的相关处理:

1、字符数组的初始化,如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。例如:char a[9]={'1','2','3','4','5','6','7','8'};中,初始化数值只提供了8个,但字符长度为9,因此,会自动在补充空字符(即'\0')。

2、字符串常量初始化数组。

例如:char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'};可写为:char c[ ]={"C program"} 或去掉{}写为:char c[ ]="C program";注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。

参考资料来源:百度百科-字符数组



不是字符数组中最后一个字符必须为'\0',如果字符数组中存放的是一个字符串,则最后一个字符应当'\0','\0'是结束符号,这样当输出这个字符串时,只须输入数组名就可以,输出函数会自动输出数组中的字符,直到遇到'\0'为止,否则你就要利用循环自己将字符一个一个的输出,而且还要判断该字符是不是所需要的字符,明白了么?

'\0'是为了关闭字符串,如果不关闭,那么就要爆掉!
所以开数组时要开大!


字符串与一般字符数组的最大区别在哪里?能不能对字符串进行整体的读写...
C语言中字符串与一般字符数组的最大区别在于:字符串常量的最后由系统加上一个'\\0',而字符数组不会添加。字符串能通过scanf()、printf()等函数进行整体的读写。C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言...

c语言中字符串数组的长度,什么时候将'\\0'算上,什么时候不用算上啊...
如char a[]=“China”;这个长度就等于5。其实在系统中a占了6个位置,最后一个放了一个'\\0'。但是你如果你写char a[]={'C','h','i','n','a'};这个长度也是5,但系统不会在最后放'\\0',所以它在系统中只占5个位置。应该说,这个a只能叫“字符数组”,不能叫“字符串数组”。

C语言中怎么查找字符串数组中的某个字符?
程序有误,修改如下:include <stdio.h> include <string.h> void main(){ char sh[20];gets(sh);for(int i=0;i<20;i++){ if(sh[i]='@'){ printf("判断出有字符@\\n");break;} if(sh[i]='\\0')printf("无字符@\\n");} } ...

用C语言输入3个字符串,并找出其中的最大值?
多个相等的最大值,只返回其中1个 include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>int getsum(char *str);\/\/获取字符串ASC总和char *getmax(int num[3]);\/\/3个整数型的数字比较,返回最大的那个数组下标 如果多个最大值返回多个下标(用字符串保存)int getmax...

下面是有关C语言字符数组的描述,其中错误的是( )。
【答案】:D 用来存放字符量的数组称为字符数组。字符数组也可以是二维或多维数组,对一个字符数组,如果不作初始化赋值,则必须说明数组长度,还可用printf函数和scarlf函数一次性输出/输入一个字符数组中的字符串,而不必使用循环语句逐个地输入\/输出每个字符。通常用一个字符数组来存放一个字符串。所以...

C语言中怎么把字符数组里的数据存放到字符串数组中
利用C语言标准库中的strtok()函数,可以轻松快捷的将以空格分隔开的一串字符分成多个子串,存放到字符指针数组中。函数说明:include <string.h> \/\/头文件 char *strtok(char *str, const char *delim);strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delim则为分割字符串中...

C语言static 加在字符数组中才能得到正确的字符串,什么原理?
现在的社会是一个高速发展的信息化时代,尤其是各种软件出现在我们的生活里面,带来更快的节奏发展,而这些软件都是通过编程语言来编写的,最基础的语言自然也是c语言,更是无数程序员入门的语言,其中关于字符串常量很多人很是疑惑C语言static 加在字符数组中才能得到正确的字符串,什么原理?其实就是静态...

在fortran中,如何提取字符数组中每个字符串的前两位
program abc123implicit nonecharacter(len=10)::a(5)=(\/"afdfdfsd","asfdsfgdg","gfgergdfd","fwegsddfd","fdsgergfs"\/) !需要提取字符串的数组character(len=2)::b(5)character(len=10)::xinteger::ido i=1,5x=a(i)b(i)=x(1:2) !提取前两位end dodo i=1,5write(*,*)b...

C语言,编写一个程序,输入若干字符串,找出其中最长的字符串并输出。要...
1、我们在main函数之前定义一个函数。2、然后我们就可以开始编写,并且先输入整个框架。3、然后我们可以用和循环开始进行输出。4、利用普通变量也可以使用指针变量来书写。5、在这里我们将以指针变量来书写。6、书写完毕后,我们将可回去main函数中进行直接调用。

字符串以什么标志字符串的结束
空字符是一个ASCII码为0的字符,它在C、C++等许多编程语言中用来表示字符串的结束。例如,在C语言中,字符串被存储为字符数组,数组的最后一个元素是空字符。这个空字符告诉程序,字符串在此处结束,后续的字符不属于这个字符串。这种约定使得程序能够处理不同长度的字符串,因为无论字符串的实际长度如何...

高密市13737377878: c语言,字符数组中最后一个字必须为'\0',为什么错?
官段白带: 不是字符数组中最后一个字符必须为'\0',如果字符数组中存放的是一个字符串,则最后一个字符应当'\0','\0'是结束符号,这样当输出这个字符串时,只须输入数组名就可以,输出函数会自动输出数组中的字符,直到遇到'\0'为止,否则你就要利用循环自己将字符一个一个的输出,而且还要判断该字符是不是所需要的字符,明白了么?

高密市13737377878: 存储字符数组中的最后一个字符必须是'\0'? -
官段白带: 这个不一定,不同的编程工具对字串的定义是不同的在早期的DOS功能调用中,汇编调用的输出字串是以$结尾的而PASCAL语言是没有结束符而在字串头上放一个长度在C语言中,字串是以'\0'结尾的,但不是必须的(除非你要调用字串处理函数)

高密市13737377878: C语言中: char a[5]就是一个长度为5的字符数组,最多存储4个字符,最后一个字符必须是 '\0'. -
官段白带: \0是字符串的结束标记 没规定说 char数组最后一个字符必须是\0 只不过你的最后一个字符不是\0的话 你用s%这类的输出控制的时候会越界出乱码就是了

高密市13737377878: C语言 vc++ 怎么给字符数组的最后一个元素赋值为0? -
官段白带: 字符串赋值给字符数组(保证最后一个为0): char a[20]={ 'H','e','l','l','o',0 }; char a[20]={ "Hello" }; strcpy(a,"Hello"); //双引号引起来的字符串默认最后添加0 a[0]='H'; a[1]='e'; a[2]='l'; a[2]='l'; a[4]='o'; a[5]=0; scanf("%s",a); //运行时键盘输入Hello

高密市13737377878: c语言从文件中读的字符存入数组中,数组最后一位是什么 -
官段白带: '\0' . 例: 定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实 际长度,C 语言规定了一个“字符串结束标志”,以字符'\0'代表.如果有一个字 符串,其中第10个字符为'\0',则此字符串的有效字符为9个.也就是说,在遇到 第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串. 系统对字符串常量也自动加一个'\0'作为结束符.例如"C Program”共有9个字 符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的.(通过sizeof() 函数可验证)

高密市13737377878: C语言字符数组和字符串的关系 -
官段白带: int main(void) { char s[6]; s[0] = 'a'; s[1] = 'b'; s[2] = 'c'; s[3] = 'd'; s[4] = 'e'; s[5]='\0';//字符串的最后一个字符必须为ascii 0,表示字符串结束. printf("%s\n",s); return 0; }

高密市13737377878: C语言的字符与字符串数组,我混乱了! -
官段白带: 两者都可以,实际上字符数组也就是字符串,两者是同一个东西,所以不必混乱.你给字符数组c[5]赋值也等同于给字符串c赋值.CHAR型在其值的最后,会默认加一个'\0'的结束符 第一个:char c[5]={'C','h','i','n','a'}; 在程序中,电脑会自动给c加上'...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网