请教个问题,一个字符串
char *p = "hello
world";
用strlen返回的是6,如何得到真实的长度 用st
char *p = "hello
请教个问题,一个字符串
char *p = "hello \0 world";
用strlen返回的是6,如何得到真实的长度
这是错的。这只能得到p指针的大小。一般是4.
至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长度”。
这样也不行,当我们实际开发中总不能规定用户不能输入\0啊
你不能规定用户不能输入\0;但是你可以忽略或处理用户输入的\0啊。
不知道你这样问有何意义?你想要什么长度
或者你把char *p改成char p[]="hello \0 world";
然后sizeof
呵呵。
假设楼主是用户,你怎么向程序输入一个‘\0’呢?
char *p = "hello \0 world";
用strlen返回的是6,如何得到真实的长度
17 个解决方案
#1
int i = sizeof(p);
#2
楼上,不行,这样得到的只是指针的长度4
#3
这是错的。这只能得到p指针的大小。一般是4.
至于楼主的问题应该是没有办法得到结果的。因为字符串以\0结尾,若第一个\0不算结尾,那第二个依楼主的意思是不是结尾呢?
也就是说,如果规定第一个\0无效,可以自己写个字符串函数得到长度,但这并不叫“真实长度”。
#4
strlen返回的是6,strlen函数的原型就是对字符串进行遍历,当读到字符'\0'时退出.
因此strlen("hello \0 world")=6;
另外,如果为指针的话,sizeof(p)等于指针变量的大小.
因此strlen("hello \0 world")=6;
另外,如果为指针的话,sizeof(p)等于指针变量的大小.
#5
中间加'\0'后,本质上长度就是6
#6
本帖最后由 thefirstz 于 2010-04-12 16:18:32 编辑
楼主你的情况需要具体问题具体分析,一般都不会这么用
#7
这样也不行,当我们实际开发中总不能规定用户不能输入\0啊
#8
除非你自定义一组字符串以连续两个'\0'结束。
char *p = "hello \0 world\0";
但即使你这样定义了,求总长度的工作还是得你自己做。
char *p = "hello \0 world\0";
但即使你这样定义了,求总长度的工作还是得你自己做。
#9
你不能规定用户不能输入\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啊
用户咋输入的0啊? 数字0对应AsCII可不是0啊
#14
假设楼主是用户,你怎么向程序输入一个‘\0’呢?
#15
如果用户用键盘敲一个\再敲一个0,
那么得到的字符串是"\\0"……
那么得到的字符串是"\\0"……
#16
关注!!
#17
对哦,用户输入后是要转义的,没想到这个,谢谢大家了,结贴了
world";
用strlen返回的是6,如何得到真实的长度 用st