请教个带\0字符串长度的问题

Yong_yuanyuan 2010-04-12 04:09:44
请教个问题,一个字符串
char *p = "hello \0 world";
用strlen返回的是6,如何得到真实的长度
...全文
390 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yong_yuanyuan 2010-04-12
  • 打赏
  • 举报
回复
对哦,用户输入后是要转义的,没想到这个,谢谢大家了,结贴了
naive1010 2010-04-12
  • 打赏
  • 举报
回复
关注!!
mstlq 2010-04-12
  • 打赏
  • 举报
回复
如果用户用键盘敲一个\再敲一个0,
那么得到的字符串是"\\0"……
mstlq 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yong_yuanyuan 的回复:]
引用 3 楼 etoux 的回复:
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

这是错的。这只能得到p指针的大小。一般是4.

至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长……
[/Quote]

假设楼主是用户,你怎么向程序输入一个‘\0’呢?
linglong_2006 2010-04-12
  • 打赏
  • 举报
回复
----这样也不行,当我们实际开发中总不能规定用户不能输入\0啊

用户咋输入的0啊? 数字0对应AsCII可不是0啊
huanmie_09 2010-04-12
  • 打赏
  • 举报
回复
这样吧,定义一个计数变量,表示统计字符串时可以跳过的结束符数。
不是很通用,该标志还需要人工赋值.

#include<stdio.h>
#include<string.h>

int main()
{
char *p = "hello \0 world";
int end_count=1; /*表示统计字符串时可以跳过的结束符数*/
int len = 0;

while(*p != '\0' || end_count) {
if(*p == '\0') {
end_count--;
}
len++;
p++;
}
printf("len=%d\n", len);
return 0;
}

operatingtuzi 2010-04-12
  • 打赏
  • 举报
回复
\0 怎么输入的?
你得到他输入的时候转义个别的呢
morneve1 2010-04-12
  • 打赏
  • 举报
回复

不知道你这样问有何意义?你想要什么长度
或者你把char *p改成char p[]="hello \0 world";
然后sizeof
呵呵。
赵4老师 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yong_yuanyuan 的回复:]
引用 3 楼 etoux 的回复:
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

这是错的。这只能得到p指针的大小。一般是4.

至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长……
……
这样也不行,当我们实际开发中总不能规定用户不能输入\0啊
[/Quote]
你不能规定用户不能输入\0;但是你可以忽略或处理用户输入的\0啊。
赵4老师 2010-04-12
  • 打赏
  • 举报
回复
除非你自定义一组字符串以连续两个'\0'结束。
char *p = "hello \0 world\0";
但即使你这样定义了,求总长度的工作还是得你自己做。
Yong_yuanyuan 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 etoux 的回复:]
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

这是错的。这只能得到p指针的大小。一般是4.

至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长度”。
[/Quote]
这样也不行,当我们实际开发中总不能规定用户不能输入\0啊
昵称很不好取 2010-04-12
  • 打赏
  • 举报
回复
楼主你的情况需要具体问题具体分析,一般都不会这么用
赵4老师 2010-04-12
  • 打赏
  • 举报
回复
中间加'\0'后,本质上长度就是6
huanmie_09 2010-04-12
  • 打赏
  • 举报
回复
strlen返回的是6,strlen函数的原型就是对字符串进行遍历,当读到字符'\0'时退出.
因此strlen("hello \0 world")=6;
另外,如果为指针的话,sizeof(p)等于指针变量的大小.
eTouX 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodboy5201314 的回复:]

int i = sizeof(p);
[/Quote]
这是错的。这只能得到p指针的大小。一般是4.

至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长度”。
Yong_yuanyuan 2010-04-12
  • 打赏
  • 举报
回复
楼上,不行,这样得到的只是指针的长度4
goodboy5201314 2010-04-12
  • 打赏
  • 举报
回复
int i = sizeof(p);

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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