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

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

字符数组同样遵循此原则么?
展开
 我来答
terranlong
2012-02-18 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:4000万
展开全部
用函数求的长度其实就是字符串长度,而非占内存大小。因此长度是4,占内存是5,最后有个'\0'做结束符,不是'\n'。
字符数组如果是字符串就是这规则,否则不是
百度网友28b4182
推荐于2018-04-30 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1851万
展开全部
string a="abcd"
这个占的是五的,因为最后有一个'\0'结束符
你知道为什么会出来string这个类型吗?因为他省空间,你用几个字符他就是占多少空间
而char数组不一样的.你用的时候必需是声明有多少空间的
比如
char s[100]="abcd"
这个的话是占100的,不管里面的内容是什么.
这样懂了吗?所以要适当选择用string还是 char 数组
追问
感谢大神,string常量懂了。

关于字符数组,按照你的意思,char s[100],该字符数组长度为100(不管里面是存的纯数字还是其他),是不包含'\0',即占用内存空间为100,二不是101,是这样么??
追答
是的,所以当你的字符串长度为100时你一定要开101
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinjinmi
2012-02-18 · 超过66用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:195万
展开全部
长度为4,内存为5,你理解的差不多,不过不是'\n',而是'\0','\0'是标记字符数组结尾的

字符数组要看你做什么用了,要用puts 或者 printf输出字符串的肯定遵循,要不你不知道结尾在哪块,如果单个字符输出的话就不一定要加结尾符了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
867773467
推荐于2016-05-25 · TA获得超过180个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:148万
展开全部
实际测出来的不包括"\0"(不是\n),测得的是有效长度,应该是4,但是“\0”是存在的,也会占内存,用字符数组来储存字符,必须算"\0",它也会占一个内存
追问
呵呵,字符数组和字符串常量应该是一样的,都是以'\0'结束才对,故都会多占一个字符的空间吧?
追答
对!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vip1254125
2012-02-18
知道答主
回答量:9
采纳率:0%
帮助的人:4.5万
展开全部
用来存放字符量的数组称为字符数组。 字符数组类型说明的形式与数值数组相同。例如: 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'。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式