相关博文:C++之char和string字符串类探究
相关博文:C语言之数组探究(一):定义、大小、初始化、访问和三要素
相关博文:C语言之字符串探究(一):字符串与字符数组
相关博文:C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现
相关博文:C语言之字符串探究(三):字符串库函数操作——strlen、strcat、strcpy、strcmp
相关博文:C语言之字符串探究(四):读越界、写越界
相关博文:C语言之字符串探究(五):N系列字符串函数——strncpy、strncat、strncmp
相关博文:C语言之字符串探究(六):sprintf——把格式化的数据写入某个字符缓冲区
相关博文:C语言之字符串探究(七):atoi、itoa——整型数字和字符串的相互转换
相关博文:C语言之字符串探究(八):strchr、strstr、strtok
相关博文:C语言之字符串探究(九):空格去除——trim系列
相关博文:C语言之字符串探究(十):递归逆置字符串
N系列函数存在的意义,就是在避免写越界。
一.strncpy
strcpy( )不能检查目标空间是否能容纳源字符串的副本。拷贝字符串用strncpy( )更安全,该函数的第3个参数指明可拷贝的最大字符数。
例1:
运行结果:
附例1代码:
//小问学编程#include<stdio.h>int main(void){char* p = "123456";char str[10];strncpy(str,p,10); //将读到的'\0',写入strprintf("str = %s\n",str);char* pp = "12345678911234";strncpy(str,pp,10);printf("str = %s\n",str); //通常会有乱码打出char* ppp = "123456789aaaaa";strncpy(str,ppp,9); //只读到了9 个字符,然后在尾后加'\0'str[9] = '\0';printf("str = %s\n",str);return 0;}
二. strncat
strcat( )函数无法检查第1个数组是否能容纳第2个字符串。如果分配给第1个数组的空间不够大,多出来的字符溢出到相邻存储单元时就会出问题。当然,可以用strlen( )查看第1个数组的长度。给拼接后的字符串长度加1才够空间存放末尾的空字符。或者用strncat( ),该函数的第3个参数指定了最大添加字符数。
例2:
三. strncmp
strcmp( )函数比较字符串中的字符,直到发现不同的字符为止,这一过程可能会持续到字符串的末尾。而strncmp( )函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较到第3个参数指定的字符数。
例3:
例4: