免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2939 | 回复: 8
打印 上一主题 下一主题

.新手上路 高手指教 chmop函数原型......分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-06 16:31 |只看该作者 |倒序浏览
char *chomp(char *buf)
{
   char *p;
   for(p=buf;*p!= '\0';p++);
   if(p!=buf){p--;}
   while(p>=buf&&(*p == '\n' ||*p == '\r'))
   {
     *p-- = '\0';
   }
  return (buf);
}

int main()
{
   char *str="hello everybody!";
   char *str_cpy=NULL;
   str_cpy=chomp(str);
   printf("the str is %s\n",str_cpy);
   return 0;
}
这个代码我在rad hat上跑了,但是运行起来有点慢 ,不知道是什么原因 ,而且这个函数是掉换行符号才加.不明白!所以还请各位大哥,大姐,指点一二!
晚辈非常感谢!。。。嘻嘻

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-09-06 16:39 |只看该作者
这个函数慢你也能感觉出来?
char *str="hello everybody!";应改成
char str[]="hello everybody!";

论坛徽章:
0
3 [报告]
发表于 2010-09-06 17:10 |只看该作者
char *buf    =>  char buf[]

1 p = buf + strlen(buf)-1;

2 while(p>=buf&&(*p == '\n' ||*p == '\r')) p --;
   
3 * ++p = '\0';

论坛徽章:
0
4 [报告]
发表于 2010-09-07 08:56 |只看该作者
回复 2# hellioncu

我运行了的,谢谢你的回复,但是我还是不咋的明白!{:3_201:} 到底怎么做!

论坛徽章:
0
5 [报告]
发表于 2010-09-07 09:18 |只看该作者
回复 3# zhangsuozhu
你可不可以 ,具体详细的说明一下!呜呜!,还是不怎么的明白!{:3_201:}   {:2_169:} 谢谢了!


~-~

论坛徽章:
0
6 [报告]
发表于 2010-09-07 11:03 |只看该作者
char *p = "hello everybody!";中,p中保存的地址是rodata区的地址,这个区是不可以改的。只能读,如果你改了。就会出错。所以。在你代码中的*p-- = '\0'; 就会产生错误。

*p-- = '\0';在循环里面,会多次在结尾赋'\0',这是不必要的,只在最后一个'\r'或'\n'中赋'\0'就可以了。

for(p=buf;*p!= '\0';p++); 其实就求字符串的长度,然后把p指向字符串的结尾。 完全可以strlen来实现。

glibc里优化了strlen这个函数。所以用标准的实现更快更好理解。

论坛徽章:
0
7 [报告]
发表于 2010-09-07 13:10 |只看该作者
楼上解释的够详细的了   很少有这么耐心的人那

论坛徽章:
0
8 [报告]
发表于 2010-09-08 09:17 |只看该作者
回复 7# pengjianbokobe
不好意思!不该拿年龄当会事!本人90,谢谢各位前辈!

论坛徽章:
0
9 [报告]
发表于 2010-09-08 09:18 |只看该作者
回复 6# zhangsuozhu

太谢谢了! 谢谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP