阅读背景:

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

来源:互联网 
请教个问题,一个字符串
char *p = "hello 
请教个问题,一个字符串
char *p = "hello \0 world";
用strlen返回的是6,如何得到真实的长度

17 个解决方案

#1


int i = sizeof(p);

#2


楼上,不行,这样得到的只是指针的长度4

#3


引用 1 楼 goodboy5201314 的回复:
int i = sizeof(p);

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

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

#4


strlen返回的是6,strlen函数的原型就是对字符串进行遍历,当读到字符'\0'时退出.
因此strlen("hello \0 world")=6;
另外,如果为指针的话,sizeof(p)等于指针变量的大小.

#5


中间加'\0'后,本质上长度就是6

#6


本帖最后由 thefirstz 于 2010-04-12 16:18:32 编辑
楼主你的情况需要具体问题具体分析,一般都不会这么用

#7


引用 3 楼 etoux 的回复:
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

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

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

这样也不行,当我们实际开发中总不能规定用户不能输入\0啊

#8


除非你自定义一组字符串以连续两个'\0'结束。
char *p = "hello \0 world\0";
但即使你这样定义了,求总长度的工作还是得你自己做。

#9


引用 7 楼 yong_yuanyuan 的回复:
引用 3 楼 etoux 的回复:
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

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

至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长……
……
这样也不行,当我们实际开发中总不能规定用户不能输入\0啊

你不能规定用户不能输入\0;但是你可以忽略或处理用户输入的\0啊。

#10



不知道你这样问有何意义?你想要什么长度
或者你把char *p改成char p[]="hello \0 world";
然后sizeof
呵呵。

#11


\0 怎么输入的?
你得到他输入的时候转义个别的呢

#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;
}

#13


----这样也不行,当我们实际开发中总不能规定用户不能输入\0啊

用户咋输入的0啊? 数字0对应AsCII可不是0啊

#14


引用 7 楼 yong_yuanyuan 的回复:
引用 3 楼 etoux 的回复:
引用 1 楼 goodboy5201314 的回复:

int i = sizeof(p);

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

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


假设楼主是用户,你怎么向程序输入一个‘\0’呢?

#15


如果用户用键盘敲一个\再敲一个0,
那么得到的字符串是"\\0"……

#16


关注!!

#17


对哦,用户输入后是要转义的,没想到这个,谢谢大家了,结贴了

 world";
用strlen返回的是6,如何得到真实的长度 用st



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: