博客
关于我
C语言中函数strcpy ,strncpy ,strlcpy的用法
阅读量:667 次
发布时间:2019-03-16

本文共 2995 字,大约阅读时间需要 9 分钟。

safe string copying in C: safer strncpy vs strlcpy and more

In C programming,edeックス predecessor言下之意[a function is as important as the programmer who uses it[/Vetaのリスト]. For string manipulation,.AutoSize experts rely on functions like strcpy, strncpy, memcpy, and recently strlcpy to avoid buffer overflow issues while copying data. Among these, strlcpy sometimes be [eve

from the dinosaurs to the modern era: the journey of string copying functions

Developers have long debated which function to use for saffer and safer string copying. Back in the day, strcpy was the only option, and it was dangerous because it assumed the destination buffer had enough space and was properly terminated with a null byte /0. This assumption often led to buffer overflowattacks when dealing with untrusted user input.

the rise of strncpy: a safer alternative

Ansic standard introduced strncpy as a safer alternative. The function copies up to n bytes from the source string to the destination buffer, but it has some quirky behaviors. For example, if the source string is shorter than n, strncpy fills the destination with null bytes until the end of the n bytes. This can be useful in some cases but feels counterintuitive compared to how strcpy works.

the better choice: strlcpy

Like many open-source projects, OpenBSD developers created strlcpy to address the shortcomings of strncpy. The function ensures that the destination buffer is properly null-terminated and does not overwrite beyond the buffer's capacity. If the source string is longer than the destination buffer, the excess data is discarded, and the function returns the original length of the source string to help detect truncation.

Why Use strlcpy Instead of strncpy?

  • No Need for Manual Null Termination: With strlcPy, you simply provide the size of the destination buffer and let the function handle the rest.
  • Always Null-Terminated: The function ensures the destination buffer is properly terminated with a null byte, even if the source string is shorter than the destination.
  • Return Value for檢查: strlcpy returns the length of the source string, allowing you to detect if the copy operation was truncated.

cross-platform considErsations

While strlCpY is a great choice for Unix-like systems, it's not part of the C standard. Windows, for example, doesn't have a native strlCpY function, and the process of copying strings often involves using strncpy combined with memset to clear the remaining buffer.

when to use memcpy?

memcpy is a lower-level function that directly copies bytes without any assumptions about the source or destination data. It's useful for copying arbitrary data, including binary data that may contain null bytes. However, it requires careful buffer management to prevent overruns.

conclusion

In modern C programming, strlCpY is often the best choice for both saffer and efficient string operations. However, your choice of function depends on the specific needs of your project and the environments you're targeting.

转载地址:http://xnoqz.baihongyu.com/

你可能感兴趣的文章
html5 h5学习总结
查看>>
webpack的安装和使用
查看>>
react 之 HOOK 简介
查看>>
centos安装python3.x
查看>>
编译原理-词法分析
查看>>
Unable to run Intel® HAXM installer: 无法启动过程,工作目录
查看>>
WslRegisterDistribution failed with error: 0x800701bc
查看>>
POJ 3666 Making the Grade 线性DP
查看>>
POJ - 3617 Best Cow Line
查看>>
14栈和队列的应用-数制的转换
查看>>
Vue.js学习-10-Vue.js计算属性set get 简单学习
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
解决Max retries exceeded with url的问题
查看>>
研发效能工具集
查看>>
saas创业八阶段-4、团队复制阶段
查看>>
【AI全栈二】视频流多目标多类别无延迟高精度高召回目标追踪 YOLO+Deepsort 全解
查看>>
2020 祥云杯misc 到点了
查看>>
Linux——系统安全及应用(开关机安全机制、系统弱口令检测、NMAP)
查看>>
C语言共用体union
查看>>
kafka超时错误或者发送消息失败等错误,排错方式
查看>>