`
kenby
  • 浏览: 724602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

strlcpy实现

    博客分类:
  • c
 
阅读更多
#include <stdio.h>

/*
 * Copy src to string dst of size siz.  At most siz-1 characters
 * will be copied.  Always NUL terminates (unless siz == 0).
 * Returns strlen(src); if retval >= siz, truncation occurred.
 */
int strlcpy(char *dst, const char *src, int siz)
{
	register char *d = dst;
	register const char *s = src;
	register size_t n = siz;

	/* Copy as many bytes as will fit */
	if (n != 0 && --n != 0) {
		do {
			if ((*d++ = *s++) == 0)
				break;
		} while (--n != 0);
	}

	/* Not enough room in dst, add NUL and traverse rest of src */
	if (n == 0) {
		if (siz != 0)
			*d = '\0';		/* NUL-terminate dst */
		while (*s++)
			;
	}

	return (s - src - 1);	/* count does not include NUL */
}

int main()
{
    char buf[5];
    char *s[] = {"abc", "abcd", "abcde", "abcdef"};
    int i, len, size = sizeof(buf);

    for (i = 0; i < 5; i++) {
        buf[i] = '#';
    }

    printf("size = %d\n", size);

    for (i = 0; i < 4; i++) {
        len = strlcpy(buf, s[i], size);
        printf("src = %s, len = %d, buf = %s", s[i], len, buf);
        if (size <= len) {
            printf(", truncation occurred\n");
        } else {
            printf("\n");
        }
    }

    return 0;
}
 
分享到:
评论

相关推荐

    高质量C课程作业程序实现

    - 安全的字符串操作:避免缓冲区溢出,使用`strncpy()`和`strlcpy()`等安全函数。 9. **螺旋数组.c**: - 广度优先搜索(BFS)或深度优先搜索(DFS):实现螺旋矩阵的遍历和打印,可能需要掌握这两种搜索算法。 ...

    strcpy的用法.pdf

    本文将详细阐述`strcpy`函数的使用方法,以及它在处理字符串时可能引发的安全问题,并探讨相关的替代函数`strncpy`和`strlcpy`。 ### strcpy函数的用法 `strcpy`函数的基本形式是`strcpy(s1, s2)`,它的作用是将...

    图书管理系统(C++)

    1、将类的定义、实现分开来,便于修改; 2、运用了很多函数 setw()\setfil();sprintf()\printf();atio();seekg()\tellg(); system&#40;&#41;;strncpy()\strcpy()\strlcpy(); memset(); 文件的读入、写出等功能;...

    缓冲区原理 基础原理 重在基础

    1. 使用安全的编程技术,如使用安全版本的函数,如strncpy、strlcpy等,这些函数会检查目标缓冲区的大小,防止溢出。 2. 对用户输入进行严格的验证和过滤,限制输入数据的长度和格式。 3. 开启编译器的安全选项,如...

    代码溢出初探

    此外,使用安全的字符串处理函数(如`strlcpy`或`memcpy`)也可以减少缓冲区溢出的风险。 总结来说,代码溢出是一种严重的安全问题,可以通过改进编程习惯、使用安全的编程技术以及实施输入验证等措施来预防。理解...

    深入了解strcpy函数.zip

    4. 使用更高级的字符串处理库,如POSIX的`strlcpy`和`strlcat`。 **学习资源** 在深入学习`strcpy`函数时,可以参考以下资源: 1. 《C Primer Plus》 - Stephen G. Prata,这本书详细介绍了C语言的基础知识,包括...

    Linux下的C编程实战

    在多线程环境中,必须使用线程安全的库函数,如`strlcpy`和`strlcat`代替`strcpy`和`strcat`,确保在并发访问时不会出现数据竞争。 综上所述,Linux下的C编程实战涵盖了从线程模型到线程同步的广泛知识,开发者...

    libft

    - `ft_strlcat`和`ft_strlcpy`:安全的字符串连接和复制,它们会计算目标缓冲区的大小,避免溢出。 - `ft_strlen`:计算字符串的长度。 - `ft_strdupa`:类似于`strdup`,但不考虑栈空间,而是使用动态内存分配。...

    字符串操作函数,c(c++)

    在C和C++编程语言中,字符串操作是基础且重要的组成部分。面试中,字符串处理函数的熟练...在实际开发中,考虑到安全性和效率,可能需要使用更安全的替代品,如C++的`std::string`类或C的`strncpy`、`strlcpy`等函数。

    Linux C高级程序员指南

    包括但不限于正确处理输入验证、防止缓冲区溢出、使用安全的字符串处理函数(如strncpy、strlcpy等),以及了解和防范各种类型的攻击(如SQL注入、XSS等)。 九、Linux API和系统编程 Linux提供了丰富的API供...

    C语言源程序的缓冲区溢出漏洞分析及解决方案.pdf

    攻击者可以利用溢出修改返回地址,使得程序跳转到攻击者提供的地址执行,从而实现代码注入。 4. 防止缓冲区溢出的策略 - 使用安全函数:如`strncpy`、`strlcpy`等,这些函数在复制字符串时会限制拷贝的字节数。 - ...

    最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)

    例如,`av_parse_time()`可以解析时间字符串为微秒级的时间值,`av_url_split()`用于解析URL,`av_strlcpy()`和`av_strlcat()`则是安全的字符串拷贝和连接函数。这些工具函数方便了开发者处理各种格式的数据。 在...

    linux_C_functionsGuide.rar

    在Linux操作系统中,C语言是核心开发语言,其丰富的库函数是进行系统级编程和应用程序开发的重要工具...通过深入学习和实践这些Linux C库函数,开发者能更好地驾驭Linux环境下的C语言编程,实现高效、可靠的软件开发。

    Linux-C.zip_visual c

    Linux提供了丰富的C函数库,使得开发者能够高效地利用系统资源,实现各种功能。本资料主要针对Linux环境下的C编程,特别是针对使用Visual C进行开发的用户,旨在帮助他们理解和应用Linux C函数库。 Linux C函数库是...

    linux 环境高级编程

    12. **安全编程**:了解常见的安全问题,如缓冲区溢出、格式字符串漏洞、指针解引用错误等,以及相应的防范措施,如使用安全的函数替代(如strlcpy, asprintf)。 以上这些知识点构成了Linux环境下高级编程的基础,...

    常用linux系统调用函数集合

    8. **网络编程**:`socket()`, `bind()`, `listen()`, `accept()`, `connect()`, `send()`, `recv()`等函数用于建立、管理和通信网络连接,是实现TCP/IP协议栈的基础。 9. **错误处理**:`errno`全局变量记录了最近...

    《深入学习c++string》2.1版

    C++为了安全引入了更安全的字符串处理函数,如`strncpy`、`strlcpy`等,避免了缓冲区溢出问题。 10. C++字符串分词 使用`std::stringstream`可以方便地从字符串中读取单词或分隔符。Boost库提供了`tokenizer`类,...

Global site tag (gtag.js) - Google Analytics