C语言中字符串的复制与memcpy函数

本文通过一道360实习生笔试题探讨了C语言中字符串处理的问题,特别是字符串复制。在处理域名字符串时,作者意识到使用memcpy()函数进行内存片段复制比strcpy()更高效。文章详细解释了strcpy()和memcpy()的区别,并通过实例展示了它们在处理字符串时的不同效果,还介绍了如何利用memcpy()实现字符串的高效交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在线做一道360实习生笔试题, 发现大多数题还是比较基础的, 但都需要仔细斟酌. 不过我已被虐得面目全非, 操作系统和计算机网络相关的很多知识都不会, 还得努力学习. 不过说重点, 面试题有两个编程题, 第一个是实现hashmap, 第二题是一个字符串的处理, 我主要说说第二题, 题目描述如下:

实现域名的字段顺序翻转函数,比如输入www.so.com, 输出为com.so.www, 要求实现的效率尽可能的优化

在做这个题的时候还剩下不到10分钟, 慌忙中将题目看复杂了,我想成会有www.abc.efg.com这样的情况了, 于是惯性思维促使我使用c++将域名按”.”分段, 然后逆序输出, 写的也烂, 也不是效率最高的, 提交后再看题目发现域名是只有www域名本体com三个部分, 当然后面的的com可能是其他的后缀,比如io或者info之类的, 发现直接是memcpy()复制内存片段效率应该会更高, 即首先复制后缀, 然后复制域名本体, 然后再复制www到字符串缓冲区,然后输出就是结果了,于是用c实现了这个方法:

#include <stdio.h>
#include <string.h>
void trans(char *res, char *a)
{
    strcat(a, "."); //在域名默认加上".", 因为"com", 移动到最前面后后面需要一个"."
    const char *src = a; //复制一个常量副本, 因为memcpy()函数的参数中要求常量
    int len = strlen(src) - 1;
    int i = len;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值