这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 字符串连接还能这么玩

共1条 1/1 1 跳转至

字符串连接还能这么玩

院士
2026-07-16 10:35:28     打赏
字符串连接还能这么玩

在项目开发中经常会遇到要将两个字符串连接的情况,而通常的作法往往是使用:

sprintf(buf, "%s%s", str_a, str_b);

记得要使用sprintf()函数则需要添加<stdio.h>的头文件。

在内存中执行格式化输入输出的stdio接口sprintf(),首先会调用fmemopen()函数构造一个基于内存的FILE对象,然后,调用fprintf()等函数完成最终的格式化输入输出功能,最后销毁临时构建的FILE对象。因此,这些接口的开销较大;无论从空间复杂度看还是从时间复杂度看,都远大于strcat()、strcpy()等函数。因此,如果只是想完成字符串的串接大可不必调用STDIO接口,而应该调用其它的标准库函数。比如下方方法:

strcpy(buf, str_a);
strcat(buf, str_b);

如果对性能仍不满足,则可以进一步优化以上字符串串接代码。strcat()首先会找到str_a的尾部,然后复制str_b的内容直到字符串末尾。但实际上,strcpy()函数在其内部实现中一定已经循环到了str_a的尾部,故而也知道str_a中签字串的尾部地址。然后,strcpy()函数并没有返回str_a中指向字符串尾部的指针,返回的却是buf本身。幸好,为满足这一需求,标准库特意增加了一个接口stpcpy(),该接口复制字符串并返回指向其尾部的指针:

#include <string.h>

char *stpcpy(char *dest, const char *src);

我们可以进一步优化以上用来串接两个字符串的代码:

// sprintf(buf, "%s%s", str_a, str_b);
char *p = stpcpy(buf, str_a);
strcpy(p, str_b);



关键词: 字符串     stpcpy    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]