免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 羽人
打印 上一主题 下一主题

关于“永远的UNIX”主页上的一篇文章 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-01-09 16:45 |只看该作者

关于“永远的UNIX”主页上的一篇文章

(str2==NULL)。
====
GVIM粗心了。
str2!=NULL,
*str2=='\0'.

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
32 [报告]
发表于 2005-01-09 16:50 |只看该作者

关于“永远的UNIX”主页上的一篇文章

嘿嘿,发了帖子就发现了,改了上面:) 谢谢指正。

论坛徽章:
0
33 [报告]
发表于 2005-01-09 16:56 |只看该作者

关于“永远的UNIX”主页上的一篇文章

原帖由 "gvim" 发表:
reference就会出错。
str1="abcdef\0"
str2="abcd\0"

当*str1==*str2=='d' && *str1!=0,进入下一个循环
然后str1++, str2++,这个时候*str1==e ,*str2==??(str2==NULL)。*str2=='\0',str2!=NULL!!!str2仍然在访问它可以访问的内存,没有任何越界。
出都出错了,还讨论什么越界。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
34 [报告]
发表于 2005-01-09 17:00 |只看该作者

关于“永远的UNIX”主页上的一篇文章

'\0'不是NULL吗?

论坛徽章:
0
35 [报告]
发表于 2005-01-09 17:06 |只看该作者

关于“永远的UNIX”主页上的一篇文章

[quote]原帖由 "gvim"]'\0'不是NULL吗?[/quote 发表:

*str2=='\0',
但是str2!=NULL!!!
这个概念???

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
36 [报告]
发表于 2005-01-09 17:14 |只看该作者

关于“永远的UNIX”主页上的一篇文章

惭愧!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
37 [报告]
发表于 2005-01-09 21:55 |只看该作者

关于“永远的UNIX”主页上的一篇文章

[quote]原帖由 "gvim"]'\0'不是NULL吗?[/quote 发表:


有过很长的帖子讨论这个问题,请搜索参阅。

论坛徽章:
0
38 [报告]
发表于 2005-01-10 08:57 |只看该作者

关于“永远的UNIX”主页上的一篇文章

int strcmp(char *str1,char *str2)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
39 [报告]
发表于 2005-01-10 09:27 |只看该作者

关于“永远的UNIX”主页上的一篇文章

我测试的结果,这样的话是原来的3倍左右

  1. 程序t1.c
  2. int streql(char *str1,char *str2)
  3. {
  4.     register long num1;

  5.     while((num1 = *(long *)str1) == *(long *)str2 && num1 & 0xff000000 && num1 &
  6. 0x00ff0000 && num1 & 0x0000ff00 && num1 & 0x000000ff) {
  7.         ((long *)str1)++;
  8.         ((long *)str2)++;
  9.     }
  10.     while(*str1 == *str2 && *str1) {
  11.         str1++;
  12.         str2++;
  13.     }
  14.     return(*str1 == '\0' && *str2 == '\0');
  15. }
  16. main()
  17. {
  18.     char a1[10001];
  19.     char a2[10002];
  20.     int i;

  21.     memset(a1, '0', 10000);
  22.     a1[10000] = 0;
  23.     memset(a2, '0', 9999);
  24.     a2[9999] = 0;
  25.     for(i = 0; i < 100000; i++) {
  26.         streql(a1, a2);
  27.     }
  28. }
复制代码
  1. 程序t2
  2. int streql(char *str1,char *str2)
  3. {
  4.     while(*str1 == *str2 && *str1) {
  5.         str1++;
  6.         str2++;
  7.     }
  8.     return(*str1 == '\0' && *str2 == '\0');
  9. }
  10. main()
  11. {
  12.     char a1[10001];
  13.     char a2[10002];
  14.     int i;

  15.     memset(a1, '0', 10000);
  16.     a1[10000] = 0;
  17.     memset(a2, '0', 9999);
  18.     a2[9999] = 0;
  19.     for(i = 0; i < 100000; i++) {
  20.         streql(a1, a2);
  21.     }
  22. }
复制代码


time t1
real    0m1.07s
user    0m1.07s
sys     0m0.00s

time t2
real    0m3.06s
user    0m3.04s
sys     0m0.01s

论坛徽章:
0
40 [报告]
发表于 2005-01-10 09:47 |只看该作者

关于“永远的UNIX”主页上的一篇文章

兄弟,厉害,这样的方法都能想到!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP