| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5350 人关注过本帖
标题:如何判断指针数组结束
只看楼主 加入收藏
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
结帖率:96%
收藏
 问题点数:0 回复次数:7 
如何判断指针数组结束
假设有一个指针数组,不知道这个数组由多少个指针组成的,如何去判断它到哪里结束?

例如 char *ch[]={"a","b","c"..........};
哪里结束呢?越界的指针又是个野指针,怎么判断好呢?
谢谢!
搜索更多相关主题的帖子: 多少 如何 
2012-12-22 22:58
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
可以的,
用sizeof(ch) / sizeof(ch[0]) 就能计算出来了
 int main(void)
 {
     char *ch[]={"asssssss","bvv","css", "d"};
     int n = sizeof(ch) / sizeof(ch[0]);
     printf("n = %d", n);
 }

C:\Users\yuccn>D:\test\ttttt\debug\ttttt.exe
n = 4
C:\Users\yuccn>



我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-22 23:24
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
vc库定于了个_countof()宏,就是用于计算数组的个数的

如果你包含了对应的库,直接_countof(ch) 也行了的,他等价于sizeof(ch) / sizeof(ch[0])

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-22 23:25
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 3楼 yuccn
斑竹。。哎啊。我结贴了。。给不了分啊。。。

谢谢了。。
2012-12-22 23:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
sizeof()求的是数组占用空间的尺寸(以字节为单位),但不能求出数组有效数据使用了多少空间。比如,定义char str[n]后,用sizeof(str)永远得到n,这是不需要程序运行就由编译器在编译时计算得到的;假如是int x[n],sizeof(x)得到的是n * sizeof(int),因为每个元素int占用的空间是sizeof(int)字节,用sizeof(x) / sizeof(int),也同样得到n。这些运算,都得不到有效数据到底到哪为止,就如尽管是str[n],但str字符串可能是空串,这个数组占用的空间是nByte,不过有效数据只是str[0] = '\0',即只有一个元素。换句话说,用strlen(str)才能知道str在哪里结束,不能用sizeof(str) / sizeof(char)来算。同样,对任何的指针型数组,也无法通过那种方法知道数据到哪个元素为止。唯一的办法,是与字符串一样,约定某个特殊标志,比如字符串约定是'\0',那么你也可以约定是NULL指针,遇到NULL指针就算是有效数据到此为止。这个问题,早几天有人讨论过,那些解决办法也是错的,原因就在这里说明,不重复。

C语言往往通过遍历数组寻找终止符来确定结束位置,但其实可以仿用BASIC数组的方法来处理:将数组第0个元素的值写入为有效元素个数,数据从序号1开始,这样就不用遍历,读一下x[0]就知道数组到底有多少个有效元素了。C的类似解决方法,是另外传递一个参数,亦即常见的count计数器表示数组的有效数据个数,这就是标准库中很多涉及数组的函数都带有计数器参数的原因,特别是新增的安全型函数,全部都是靠这种参数来加强检测越界的。

最难搞的是int型数组,是没有可能约定结束标志的,因为整数零恰恰可能是有效数据!解决办法只能是上面所说的两种。

_countof()其实就是数人头,是sizeof(x) / sizeof(int)的性质,同样是算不出有效个数的。

[ 本帖最后由 TonyDeng 于 2012-12-23 04:59 编辑 ]

授人以渔,不授人以鱼。
2012-12-23 04:49
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
学习了

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-23 08:07
flypp
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-23
收藏
得分:0 
进来学习学习!!!
2012-12-23 21:16
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 5楼 TonyDeng
我发现Tony斑竹,理论知识好扎实。。。。学习了。!
2012-12-24 21:38
快速回复:如何判断指针数组结束
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022989 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved