C语言字符串常量,字符数组占内存大小问题?

现在正在看C,有一些关于字符串常量,字符数组长度问题,还请帮忙解答:
eg:string a="abcd",若用函数可以确定,此字符串常量长度为4,占内存为4还是5呢?
我记得是有'\n',标识字符串结束的,那么占内存应该是5才对,是这样么?

字符数组同样遵循此原则么?

用函数求的长度其实就是字符串长度,而非占内存大小。因此长度是4,占内存是5,最后有个'\0'做结束符,不是'\n'。
字符数组如果是字符串就是这规则,否则不是
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-30
string a="abcd"
这个占的是五的,因为最后有一个'\0'结束符
你知道为什么会出来string这个类型吗?因为他省空间,你用几个字符他就是占多少空间
而char数组不一样的.你用的时候必需是声明有多少空间的
比如
char s[100]="abcd"
这个的话是占100的,不管里面的内容是什么.
这样懂了吗?所以要适当选择用string还是 char 数组追问

感谢大神,string常量懂了。

关于字符数组,按照你的意思,char s[100],该字符数组长度为100(不管里面是存的纯数字还是其他),是不包含'\0',即占用内存空间为100,二不是101,是这样么??

追答

是的,所以当你的字符串长度为100时你一定要开101

本回答被网友采纳
第2个回答  2012-02-18
长度为4,内存为5,你理解的差不多,不过不是'\n',而是'\0','\0'是标记字符数组结尾的

字符数组要看你做什么用了,要用puts 或者 printf输出字符串的肯定遵循,要不你不知道结尾在哪块,如果单个字符输出的话就不一定要加结尾符了
第3个回答  推荐于2016-05-25
实际测出来的不包括"\0"(不是\n),测得的是有效长度,应该是4,但是“\0”是存在的,也会占内存,用字符数组来储存字符,必须算"\0",它也会占一个内存追问

呵呵,字符数组和字符串常量应该是一样的,都是以'\0'结束才对,故都会多占一个字符的空间吧?

追答

对!

本回答被提问者采纳
第4个回答  2012-02-18
用来存放字符量的数组称为字符数组。 字符数组类型说明的形式与数值数组相同。例如: char c[10]; 由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如: char c[5][10];即为二维字符数组。 字符数组也允许在类型说明时作初始化赋值。例如: static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};赋值后各元素的值为: 数组C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予0值。 当对全体元素赋初值时也可以省去长度说明。例如: static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};这时C数组的长度自动定为9。
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。

C语言字符串常量,字符数组占内存大小问题?
用函数求的长度其实就是字符串长度,而非占内存大小。因此长度是4,占内存是5,最后有个'\\0'做结束符,不是'\\n'。字符数组如果是字符串就是这规则,否则不是

C语言中字符常量与字符串常量在内存中所占字节的差异是什么?
字符串常量,所占内存字节数比字符串实际字符个数多了1个字节,因为C格式的格式字符串在后面加了一个结束标志位“'\\0'”。

为什么在C语言中字符常量占四个字节而字符变量却只占一个字节
C语言中,字符型 char 变量对应于 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)。ASCII 码的范围是 0 - 126 (十进制)。 用一个字节表示。所以,字符型 char 变量,占一个字节。C语言中的常量一般分为两类: 整型常量和浮点数常量。整型常量的默认数据类型是 ...

c语言字符串和字符常量占用内存大小怎么看
char A[]="ABC";\/\/这是用字符串符初值,在C语言中,字符是以'\\0'结尾的,因此,A的长度应该为4;而:char B[]={'A','B','c'};由只是普通的数组,其内有三个字符,其长度为3;多说一句:在拿不准到底是多少的时候,可以用sizeof()来看一下!如:printf("sizeof(A)=%d,sizeof(B...

字符串常量,C语言字符串常量详解
如 "你好" 占 5 字节,因为中文字符占用 2 字节。C 语言没有特定的字符串数据类型,但 C++ 和 Java 等语言提供了相应支持。尝试将字符串常量赋给字符变量是不允许的,因为字符变量只能存储单个字符,而字符串常量包含了多个字符。这与字符变量的存储机制和字符串常量的性质不符。

字符常量与字符串常量的区别是什么
字符常量有两种类型,包括普通字符和特殊转义字符,后者通过反斜杠表示特殊含义。而字符串常量与字符数组相关,C语言中没有专用的字符串变量,存储字符串通常需要使用字符数组,如"char a[10]="love"。总的来说,字符常量和字符串常量在C语言中扮演着不同的角色,理解它们的差异对于编程至关重要。

C语言中字符串占几个字节?
字符串是以\\0为结束符的字符数组,\\0是个不可视字符,故"china"所占的空间为:5+1=6。char array[]="china"; 这里定义数组array,并用"china"进行初始化。定义数组时,没有指定数组元素个数,则,数组array所占空间由初始化数据所确定。因此,array所占空间就是"china"所占空间的大小。

c语言字符与字符串问题
不是同一类型,字符'a'只占了一个字节,字符串的后面是有个结束符'\\0',因此"a"实际的储存空间站两个字节,为{a,\\0}

C语言学习易错知识点总结 | 来看看我的刷题经验!
字符数组赋值问题:字符数组赋值时不能直接赋值,应使用字符串常量。结构体相关结构体所包含的变量不可初始化:注意C语言中结构体变量不可直接初始化。查看结构体内部变量所占内存大小:使用sizeof()函数结合指针计算。库函数相关绝对值函数:注意math.h库中的abs()和fabs()函数分别处理整型和浮点型绝对值...

c语言给字符指针赋值字符串常量,那会为字符串常量分配内存空间吗?
声明的字符串常量会放在只读数据段,所以会分配内存空间的。chat *p="123";就是将123放在内存的只读数据段,然后将该地址赋值给p。

相似回答