关于strlen()与指针常量

小V小V志 2009-12-26 05:53:56
1.
void main()
{
char *str="12345";
cout<<strlen(str)<<"\t"<<sizeof(str);

}
结果为什么是5 、4
而不是6、4
2.
char * const p="ABC";

这个p[0]='B';对吗???
...全文
260 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwzyb2002 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 crlystaldong 的回复:]
那请问大家这个
void main()
{
  char st[20]="hello\0\t\\\"; // ;前掉了个"号,变量名也不对,应为str
  cout < <strlen(str) < <"\t" < <sizeof(str); // 首先 < < 是不对的,其次输出为5 20
}
答案是13.20
为什么??
[/Quote]

总结下:发代码之前请先自个测试下,发结果之前也请实验下,信口雌黄是会误导人的。
cq_gongyoulong 2009-12-28
  • 打赏
  • 举报
回复
strlen(str); ----计算str中出现第一个'\0'位置的长度

比如:

char str[] = "abc\0de";
len1_Str = strlen(str);
len2_Str = sizeof(str);

len1_Str = 3; 而不是等于6.

但是:len2_Str = 7;

yhm9084nerv 2009-12-27
  • 打赏
  • 举报
回复
答案错了,运行了石a,我刚刚试了
bean11222 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bearnan 的回复:]
那请问大家这个
void main()
{
  char st[20]="hello\0\t\\\";
  cout < <strlen(str) < <"\t" < <sizeof(str);
}
答案是13.20
为什么??

答案有点问题呀!是5 20呀!
[/Quote]
这个在VS2005中编译不通过 报错:常量中有换行符 ~~~
bearnan 2009-12-27
  • 打赏
  • 举报
回复
那请问大家这个
void main()
{
char st[20]="hello\0\t\\\";
cout < <strlen(str) < <"\t" < <sizeof(str);
}
答案是13.20
为什么??

答案有点问题呀!是5 20呀!
liubingqian 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crlystaldong 的回复:]
引用 2 楼 loaden 的回复:
这个p[0]='A';

书里答案是B的```我不解!!

[/Quote]
尽信书不如不读书,哪个书也不保证无错,更何况现在出版业这么浮躁,录入、校对根本都不负责。
老邓 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 crlystaldong 的回复:]
那请问大家这个
void main()
{
  char st[20]="hello\0\t\\\";
  cout < <strlen(str) < <"\t" < <sizeof(str);
}
答案是13.20
为什么??
[/Quote]
楼主可以另开帖子讨论这个问题。
fire123cba 2009-12-26
  • 打赏
  • 举报
回复
共同学习
honghu069 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crlystaldong 的回复:]
引用 2 楼 loaden 的回复:
这个p[0]='A';

书里答案是B的```我不解!!

[/Quote]
估计那本书是以TC做编译器...
小V小V志 2009-12-26
  • 打赏
  • 举报
回复
那请问大家这个
void main()
{
char st[20]="hello\0\t\\\";
cout<<strlen(str)<<"\t"<<sizeof(str);
}
答案是13.20
为什么??
小V小V志 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
这个p[0]='A';
[/Quote]
书里答案是B的```我不解!!
zxustc 2009-12-26
  • 打赏
  • 举报
回复
1.c风格的字符串以及C++ 标准库中的string类型都以'\0'作为结束的标志,但是调用库函数计算长度时都不计算这个结束的标志。

2.这个p可以理解为数组的首地址,p[0]应该等于'A'
lori227 2009-12-26
  • 打赏
  • 举报
回复
char * const p="ABC"; 这样定义相当于 const char* const p = "ABC";
p[0] = 'B' 出错的
davelv 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loaden 的回复:]
sizeof(str); 与 sizeof(char*)是等效的!
[/Quote]

受限声明:当且仅当str是字符串指针而非字符串数组的时候等效
老邓 2009-12-26
  • 打赏
  • 举报
回复
sizeof(str); 与 sizeof(char*)是等效的!
starwalker 2009-12-26
  • 打赏
  • 举报
回复
1. strlen取字符串长度,不包括结尾'\0'
2. 写法不对,但是不一定会出错,要看编译器。
老邓 2009-12-26
  • 打赏
  • 举报
回复
这个p[0]='A';
老邓 2009-12-26
  • 打赏
  • 举报
回复
strlen计算时,不包括字符串结束符NULL。

sizeof计算的是指针大小:4byte、

64,648

社区成员

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

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