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语言,一字符串存放在字符数组a中,将字符数组a中下标值为偶数的元素按...
假定有: char a[20]="zabkam";a 是字符数组,它的下标从0起,到19为止,有 a[0],a[1],a[2],a[3],a[4],...a[19];下标值为偶数 指 a[0],a[2],a[4],a[6],...a[18] 这些元素。程序如下:include <stdio.h> int main(){ char a[20]="zabkam",t;int i,j,L...

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

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

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语言中字符串数组的长度,什么时候将'\\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 s[2][80]={ "aaa","bbbb" },char buf[80]; strcpy(buf,s[0]); strcpy(s[0],s[1]); strcpy(s[1],buf); \/\/类似于整数变量交换值 printf("%s\\n%s\\n",s[0],s[1]);} ...

C语言中 字符串与一吧字符数组的最大区别在哪里,能不能对字符串进行整体...
字符串和字符数组存储的都是多个字符。区别在于,字符串是一指针做为首址,它的值是可以变动的。但字符数组首址是固定的,是不能被变动和更改的,只能更改数组内的值,它是编译器编译的时候决定的。如:char *s = "abcde";char t[] = "12344";s= t; \/\/正确 t=s; \/\/不正确,警告 直接...

起始符与终止符区别
在计算机编程中,起始符和终止符是指在字符串或字符数组中用来标识其开始和结束的特定字符。起始符是指用来标识字符串或字符数组开始的特定字符。在大多数编程语言中,字符串或字符数组的起始位置都是从第一个字符开始的,而起始符就是用来标记这个位置的特定字符。在C语言中,字符串的起始符是双引号("...

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

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

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

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

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

五常市13930023983: 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

五常市13930023983: C语言中语句的最后一定要有的一个字符是什么? -
汤环清宫: 简单c语言语句以分号,最后必须要有一个分号,如:int i;i=1;但复合语句不需要分号,如:int i,s=0;for(i=1;i<11;i++){s+=i;printf("%d\n",s);//}后面没有分号}

五常市13930023983: c语言中字符串,为什么最后要加个'\0' ? -
汤环清宫: '\0'一般放在字符串的结束处,表示字符串的结束,其是ascii值为0的字符的转义. 在头文件#include <string.h>中包含的一些字符串处理函数等中,一般处理字符串时,都是一'\0'作为字符串的结束,如果一个字符串中没有'\0'这个结束字符,那么这些函数将不能确定字符串的结束位置在哪儿,从而引起一些不必要的错误.

五常市13930023983: 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; }

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