免费注册 查看新帖 |

Chinaunix

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

[C] C语言连接两个字符串最好的方法是什么? [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
31 [报告]
发表于 2009-10-14 14:07 |只看该作者
原帖由 deadlylight 于 2009-10-14 11:03 发表
你这种做法明显是错误的,你对sprintf程序做了优化,但是strcat程序却没有优化

strcat的时候,每次都要找到src的结尾,然后再拼接,这样的话时间花在找到src的长度上
而你的sprintf程序确是每次给p直接指向 ...

技术处理方法,谈不上公平不公平。两种方法,适用不同场合,我也没说不用strcat啊!
你的例子当然是strcat好,我在那样一种需求下当然用效率最高的方法,谁会为了公平采用低效方法呢?

还有,你的例子,len1,len2事先算出来了,纯粹是为了比试,实际上,每个记录的每个字段是不等长的。
既然串尾都知道了,strcpy就行了,何必strcat?

建议,不是针对你,提供返回串尾的strcpy。

回贴主,各种场合各自有不同的最优方法,没有一定之规。

[ 本帖最后由 yulihua49 于 2009-10-14 14:17 编辑 ]

论坛徽章:
0
32 [报告]
发表于 2009-10-14 15:25 |只看该作者
原帖由 langue 于 2009-9-20 00:44 发表
通常说来,C 假定程序员具有自理能力。像预先控制好缓冲区大小一类的事,C 程序员应该是驾轻就熟的。
所以,strcat(dest, src); 这样的用法应该是常态。
如果你实在担心,倒是可以用 strncat(),或者 strlcat()。

恩,这个我同意,C语言设计的时候就认为这些问题程序员应该自己去解决,这也是很多人认为C语言麻烦而且不安全的原因。一个很简单的问题,C语言根本不会去检查数组越界

论坛徽章:
0
33 [报告]
发表于 2009-10-14 15:39 |只看该作者
原帖由 ecjtubaowp 于 2009-10-12 12:47 发表

strlcat不知是何物?

http://linux.die.net/man/3/strlcat

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
34 [报告]
发表于 2009-10-16 13:01 |只看该作者
原帖由 yulihua49 于 2009-10-14 14:07 发表

技术处理方法,谈不上公平不公平。两种方法,适用不同场合,我也没说不用strcat啊!
你的例子当然是strcat好,我在那样一种需求下当然用效率最高的方法,谁会为了公平采用低效方法呢?

还有,你的例子,l ...

找到一个函数:stpcpy(),返回尾。
int main()
{
    int i,j;
    char a[] = "abcdwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww";
    char buf[50000];
    char *p;

    for( i = 0; i < 0xfffff; i++ )
    {
        buf[0] = 0;
        p=buf;
        for(j=0;j<50;j++)  {
#ifdef STR
             strcat(buf,a);
             strcat(buf,"|");
#else
             p=stpcpy( p, a);
             *p++='|';
             *p=0;
#endif
        }
    }
    return 0;
}



real    0m3.413s
user    0m3.412s
sys     0m0.000s


比sprintf快3倍多。

打听一下,不用sprintf,有什么办法把整数或浮点数转换成字符串?

[ 本帖最后由 yulihua49 于 2009-10-16 14:24 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP