对于不以'\0'结尾的char *pstr 如何求长度?

此帐号已弃用12 2008-04-02 02:48:46
RT
...全文
604 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
双杯献酒 2008-04-03
  • 打赏
  • 举报
回复
如果接口是
BOOL fun(char*pstr);
那实际就是要求调用这个函数的时候pstr必须是用'\0'结尾的字符串.
如果使用的人不遵守基本的约定,
这种容错你做不了.
比如,有人用下面的代码来调用你的函数,你怎么判断?

BOOL bSuc = fun((char*)0x12345678);
skyful123 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 taodm 的回复:]
算了,当一个人已经深陷牛角尖后,怎么也无法说服他不要去没有意义的事的。
[/Quote]

同意楼上的观点
wzlhahr 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 WillMyPower 的回复:]
char pstr[20];
for(int i = 0 ; i < 20; i ++ )
{
pstr[i] = '4';
}

这个不以'\0'结尾吧
[/Quote]
不能这么写的,这个会造成越界的
zhous001 2008-04-02
  • 打赏
  • 举报
回复
....
m60a1 2008-04-02
  • 打赏
  • 举报
回复
可以自己写一个循环嘛,
一个个读出来,读到不是字符的管它是不是'\0',循环结束!!!!!
星光伴月 2008-04-02
  • 打赏
  • 举报
回复
这个数组的大小是固定的,就输出20个字节的内容不就完了。
awperpvip 2008-04-02
  • 打赏
  • 举报
回复
……迷失的小MM
  • 打赏
  • 举报
回复
算了算了,我只能祈祷调用我接口的人的字符串输入是正确的了,谢谢大家的解答,待会结贴。
帅得不敢出门 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 BluntBlade 的回复:]
BOOL fun(char *pstr, int len)
{
....
}
[/Quote]

举双手同意
如果没有'\0'而事先又不指定长度 这个是很糟糕。
taodm 2008-04-02
  • 打赏
  • 举报
回复
算了,当一个人已经深陷牛角尖后,怎么也无法说服他不要去没有意义的事的。
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 steedhorse 的回复:]
字符串是否以'\0'结尾跟用户输入毫无关系。
关键是你的输入方法是什么?是命令行,还是窗口上的输入框。
但不管是什么,你所调用的库肯定会给你一个'\0'结尾的。

所以,你还是在杞人忧天。要么就是没搞清楚问题是什么。
[/Quote]

这个char*pstr并非一定是输入的,
有可能是个结构指针,也有可能是memcpy函数截取其他字符串的一部分,
这些极有可能不以'\0'结尾。
physics1988 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 WillMyPower 的回复:]
引用 6 楼 ttkk_2007 的回复:
引用 4 楼 WillMyPower 的回复:
char pstr[20];
for(int i = 0 ; i < 20; i ++ )
{
pstr[i] = '4';
}

这个不以'\0'结尾吧

你告诉我他是以什么结尾,你输出pstr看看


pstr[19] = '4',最末一位了,
[/Quote]
为什么pstr[19] = '4',最末一位了,pstr[20]='4'啊,因为那个是一个数组啊,不是指针
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 xbt746 的回复:]
20是个随机值,还希望楼上仔细讲讲,我也被弄胡了
0--19已经将pstr[20]填满
后面一个不应该是'\0'?
后面一个已经是20了吧
[/Quote]

那个例子我只是想用来说明用户是可能输入非'\0'结尾的字符指针,
我现在需要判断他是否是一个合法的字符串。
mimong_lin 2008-04-02
  • 打赏
  • 举报
回复
在C和C++的函数中,对字符串的定义就是以'\0'结束的一个char组.

如果你要定义其它的字符作为字符串的结束符,那么你要自己定义函数了.

你定义的结束符,就相当于在一个char数组中char[n] = 结束符.
ttkk_2007 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 WillMyPower 的回复:]
可能我理解有些偏差吧,对字符数组和字符串区别不甚了解

我现在的问题是:
现在我有一个接口函数

BOOL fun(char*pstr)
{
....
}

用户的pstr的输入是否是合法的以'\0'结尾的字符串我无穷保障,
我该如何判断他是一个合法的字符串?
[/Quote]
什么叫合法的字符串,什么是不合法?
用户输入的pstr肯定是以'\0'结尾,你举个具体点的例子
如果你说的不合法是你16楼举的例子,那么你必须在fun里面提供长度参数
晨星 2008-04-02
  • 打赏
  • 举报
回复
字符串是否以'\0'结尾跟用户输入毫无关系。
关键是你的输入方法是什么?是命令行,还是窗口上的输入框。
但不管是什么,你所调用的库肯定会给你一个'\0'结尾的。

所以,你还是在杞人忧天。要么就是没搞清楚问题是什么。
qiucp 2008-04-02
  • 打赏
  • 举报
回复
wl
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 taodm 的回复:]
"现在我有一个接口函数

BOOL fun(char*pstr)
{
....
}

用户的pstr的输入是否是合法的以'\0'结尾的字符串我无穷保障,
我该如何判断他是一个合法的字符串?"

你无法判断!这也不是你的职责!
你只能祈祷调用你这个接口的人不脑残。
[/Quote]

没办法,现在要实现这样一个接口啊,需要这样的容错能力。
awperpvip 2008-04-02
  • 打赏
  • 举报
回复
什么strlen,Cstring,不要X猜,有空去看下汇编~
接楼上的..
#include <stdio.h>
#include <string.h>
int main()
{
char pstr[20];
int i;
for(i = 0; i < 20; i ++)
{
pstr[i] = '4';
}
int len = strlen(pstr);

printf("%d %d",len,pstr[len]);
return 0;
}

xbt746 2008-04-02
  • 打赏
  • 举报
回复
20是个随机值,还希望楼上仔细讲讲,我也被弄胡了
0--19已经将pstr[20]填满
后面一个不应该是'\0'?
后面一个已经是20了吧
加载更多回复(24)

64,683

社区成员

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

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