C++菜鸟提问有关字符串的strlen和sizeof的问题。

答案是A和C。想知道字符串中的反斜杠是怎么影响字符串的strlen和sizeof的。。被反斜杠搞得有点晕乎。。。求详解。... 答案是A和C。想知道字符串中的反斜杠是怎么影响字符串的strlen和sizeof的。。被反斜杠搞得有点晕乎。。。求详解。 展开
 我来答
heptnaol
2019-06-19 · TA获得超过7260个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1771万
展开全部

转义符的顾名思义,用来改变意义的,为啥要改变呢?有几种情况,一种是字符有语法上的意义,比如",它本身表示一个字符串的开始/结束,那如果要一个纯字符的引号呢,比如以下字符串:"He said: \"Not too bad!\"",

里面的引号用反斜杠转义,失去了语法上的意义,是单纯的一个引号字符。

另外有一些不可见的字符,和控制字符,比如换行,跳格,退格,这些都是用反斜杠加上可见字符表示的(\n \t \b),这里n t b失去了原有的意思。

再有,如果是反斜杠紧跟着数字的话,就代表八进制数,可以转义最多3位八进制数,最大是\377,这四位其实是一个字符,是ASCII的255,所以strlen("\377")的值其实是1

\023 这里也是一样的。

注意:如果是不超过了范围的,比如"\378",因为八进制里没有8,所以\37是一个八进制数,8是另一个字符,所以strlen("\378") = 2

此外,要想表示反斜杠本身,而不是转义符,则需要给转义符加转义符,即\\,前一个\是转义符,表示让后一个\失去转义符的意义,而变成一个单纯的字符\。

所有的这些情况下,转义符都是给代码作者用的,在运行时内存里不存在这个\,也就是说

反斜杠和它后面紧跟着的字符(单个或多个,最多可以3个)合起来算一个字符,反斜杠本身不占地方。

第二个知识点就是strlen和sizeof的区别,这个比较简单,当作字符串,长度不包括结束符,

结束符是0(或者写作'\0' 或者'\000',这里又复习一下转义符),占一个字节

第三个点是sizeof对数组和指针不一样,所以第二题无论字符串多长,sizeof指针都是4个字节(64bit平台占8字节)

zjf121348
2019-06-19 · TA获得超过520个赞
知道小有建树答主
回答量:1126
采纳率:59%
帮助的人:210万
展开全部
本来反斜杠会转义后一个字符,你可以认为这两个字符合起来表示一个字符;\0表示字符串的结束。
但是!这道题里的\023会被认为是一个8进制的转义。这确实是符合规范的,但是这样的题目就是纯粹恶心人了。
这是字符串本身的知识,不会影响strlen和sizeof。
strlen是个函数,计算指针直到\0(不算)的长度,但此题中间那个不是\0,所以不会停下来。sizeof是个关键字,计算对象的大小,单位为字节。
sizeof数组会计算数组的大小,但是sizeof指针就只会算指针的大小。而指针大小是和平台有关的,64位永远是8,所以第二题也可也选A。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式