求教关于strlen和sizeof参数里字符串中含有"\0"时如何处理

junlinzhi 2010-06-03 11:07:07

#include<iostream>
int main()
{
char a[] = "123456";
char b[] = "12\03456";
cout << strlen(a) << "," << sizeof(a) << endl;
cout << strlen(b) << "," << sizeof(b) << endl;

return 0;
}

输出的是:
6,7
5,6

b[]中的"\0"是怎么处理的??谢谢。
...全文
1839 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluepei28 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 poptang 的回复:]

引用 5 楼 ruibipiglet 的回复:
'\034' 本来就是转移字符 加上前面的12和后面的56 strlen为5 加上末尾NUL字节 sizeof为6
我少打一个4,呵
[/Quote]

正解,膜拜一下
junlinzhi 2010-06-03
  • 打赏
  • 举报
回复
明白啦,谢谢大家
pengzhixi 2010-06-03
  • 打赏
  • 举报
回复
另外strlen和sizeof的计算方式不一样的,strlen遇到结束符'\0'计算结束,而且结束符不算在内,但是sizeof不一样,他就是计算整个数组占用了多少内存,包括结束符。
pengzhixi 2010-06-03
  • 打赏
  • 举报
回复
’\000’代表整数0
pengzhixi 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 junlinzhi 的回复:]
呃,谢谢上面各位的回答!
还想问下:
char b[] = "12\0003456";
strlen是输出2;而为什么sizeof是输出8,为什么呢?sizeof不是遇到'\000'就结束的吗?
[/Quote]
你对八进制的转义字符没去了解?
junlinzhi 2010-06-03
  • 打赏
  • 举报
回复
呃,谢谢上面各位的回答!
还想问下:
char b[] = "12\0003456";
strlen是输出2;而为什么sizeof是输出8,为什么呢?sizeof不是遇到'\000'就结束的吗?
gary_cai 2010-06-03
  • 打赏
  • 举报
回复
打印出来你就知道是怎么回事了
cout<<b<<endl;
liutengfeigo 2010-06-03
  • 打赏
  • 举报
回复

是个好问题~
one2zero 2010-06-03
  • 打赏
  • 举报
回复
不要尝试 \000~~\099
你的\0和后面的34 组合了 \034 产生了转义
小楫轻舟 2010-06-03
  • 打赏
  • 举报
回复
学习了,刚编译了一下,果然。。。
dadun 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ruibipiglet 的回复:]
'\034' 本来就是转移字符 加上前面的12和后面的56 strlen为5 加上末尾NUL字节 sizeof为6
[/Quote]

顶!

\034是转义字符,3位8进制,用来表示ASCII码。

我刚试过了,如果是\093的话,不是8进制了,就相当于\0了。
pengzhixi 2010-06-03
  • 打赏
  • 举报
回复
去看看8进制的转义字符
Poptang 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ruibipiglet 的回复:]
'\034' 本来就是转移字符 加上前面的12和后面的56 strlen为5 加上末尾NUL字节 sizeof为6
[/Quote]我少打一个4,呵
ruibipiglet 2010-06-03
  • 打赏
  • 举报
回复


'\034' 本来就是转移字符 加上前面的12和后面的56 strlen为5 加上末尾NUL字节 sizeof为6
konta 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 poptang 的回复:]
转义字符,\03
[/Quote]
转义字符
Poptang 2010-06-03
  • 打赏
  • 举报
回复
转义字符,\03
小楫轻舟 2010-06-03
  • 打赏
  • 举报
回复
你应该 b[3] = '\0';
小楫轻舟 2010-06-03
  • 打赏
  • 举报
回复
两个字符,\ 和 0
赵4老师 2010-06-03
  • 打赏
  • 举报
回复
C++ Character Constants
Character constants are one or more members of the “source character set,” the character set in which a program is written, surrounded by single quotation marks ('). They are used to represent characters in the “execution character set,” the character set on the machine where the program executes.

Microsoft Specific

For Microsoft C++, the source and execution character sets are both ASCII.

END Microsoft Specific

There are three kinds of character constants:

Normal character constants


Multicharacter constants


Wide-character constants
Note Use wide-character constants in place of multicharacter constants to ensure portability.

Character constants are specified as one or more characters enclosed in single quotation marks. For example:

char ch = 'x'; // Specify normal character constant.
int mbch = 'ab'; // Specify system-dependent
// multicharacter constant.
wchar_t wcch = L'ab'; // Specify wide-character constant.

Note that mbch is of type int. If it were declared as type char, the second byte would not be retained. A multicharacter constant has four meaningful characters; specifying more than four generates an error message.

Syntax

character-constant :

'c-char-sequence'
L'c-char-sequence'

c-char-sequence :

c-char
c-char-sequence c-char

c-char :

any member of the source character set except the single quotation mark ('), backslash (\), or newline character
escape-sequence

escape-sequence :

simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence

simple-escape-sequence : one of

\' \" \? \\
\a \b \f \n \r \t \v

octal-escape-sequence :

\octal-digit
\octal-digit octal-digit
\octal-digit octal-digit octal-digit

hexadecimal-escape-sequence :

\xhexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit

luocw110 2010-06-03
  • 打赏
  • 举报
回复
解答很准确
加载更多回复(6)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧