周立功《程序设计与数据结构》:字符串函数
时间:08-05
来源:ZLG致远电子
点击:
如下:
int strlen(string cStr);
int strlen(char cStr[]);
int strlen(char *cStr);
虽然标准C提供的string.h接口提供了一系列的字符串操作函数,它允许在函数调用时将字符串作为一个整体对待,但这些函数同样要求我们了解底层的表示,即函数将分配内存的任务留给了用户,特别是检测缓冲区溢出的条件。当使用这个接口时,用户要为每个字符串的存储负责。这种分配方式不仅增加了程序员的负担,也间接使得编码中的错误增多了。
溢出问题
使用gets()函数从标准输入读入字符串容易导致缓冲区溢出,而误用strcpy()和strcat()同样如此。因为使用某些函数可能造成攻击者用格式化字符串攻击的方法访问内存,甚至能够注入代码,所以C11版本加入了strcat_s()和strcpy_s()函数,如果发生缓冲区溢出,它们会返回错误。printf()、fprintf()和snprintf()这些函数都接受格式化字符串作为参数,避免这类攻击的一种简单方法是不要将用户提供的格式化字符串传给这些函数。
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)