C函数篇(strncpy函数)

strncpyC语言的函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *destin, char *source, int maxlen),把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中

格式:

头文件:#include<string.h>

char*strncpy(char*dest,char*src,size_tn);

功能:

(c/c++) 复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_tn的值决定。如果src的前n个字节不含NULL字 符,则结果不会以NULL字符结束。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重 叠且dest必须有足够的空间来容纳src的字符长度+‘\0‘。举例:

#include<stdio.h>

#include<string.h>

int main()

{ char name[]={"Chinanet"},dest[20]={};

strncpy(dest,name,9);

printf("%s\n",dest); }

1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)

如果n>src由于长度达到src NULL,正常复制,特别注意,如果src中有NULL,strncpy复制到NULL即使没到n也提前停止。如果n = src串长度,与strcpy一致。注意n的选择当n > dest串长度,dest栈空间溢出产生崩溃异常。

2)src串长度>dest串长度

如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest 最后一字符置为NULL。

综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证dest串容量(能容纳下src串)才是最重要的。

strcpy和strncpy的区别

strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出。strncpy要安全一些。

strncpy能够选择一段字符输出,strcpy则不能例如:

char name[]={"Chinanet"},dest[20]={};

strncpy(dest,name,9);

printf("%s\n",dest);

strncpy可实现strcpy的字符串复制:

char name[]={"Chinanet"},dest[20]={};

strncpy(dest,name,sizeof(name));

printf("%s\n",dest);

时间: 2024-10-11 02:12:00

C函数篇(strncpy函数)的相关文章

函数篇之——函数也是数据

1.  对于JavaScript 来说,有一个概念十分重要——既函数是一种数据类型. 也就是说,下面两种函数定义在本质上是相同的: ① . function f () { return 1; } ② . var f = function () { return 1; } 其中,第二种定义方式通常被叫做函数标识记法(function literal notation). 如果我们对函数变量调用typeof,操作符返回的字符串将会是“function”. >>> var f = functi

memcpy函数、strcpy函数、strncpy函数

一.函数说明 1.memcpy函数 void  *memcpy(void *s1,  const void *s2,  size_t  n); 说明: 函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中.如果复制发生在两个重叠的对象中,则这种行为未定义. 返回值: 函数memcpy返回s1的值. 2.strcpy函数 char  *strcpy(char *s2, const char *s1); 说明: 函数strcpy把s1指向的串(包括空字符)复制到s2指向的数组中.如果复制

C函数篇(Timer函数)

语法 Timer() 语法Timer ( interval {, windowname } ) 参数 指定两次触发Timer事件之间的时间间隔,有效值在0到65之间.如果该参数的值指定为0,那么关闭定时器, 不再触发指定窗口的Timer事件.windowname:窗口名,指定时间间隔到时要触发哪个窗口的Timer事件.省略该参数时,触发当前窗口的 Timer事件返回值Integer.函数执行成功时返回1,发生错误时返回-1.如果任何参数的值为NULL,Timer()函数返回NULL.用法使 用T

C函数篇(setsockopt函数②)

套接口选项 在前面的几章中,我们讨论了使用套接口的基础内容.现在我们要来探讨一些可用的其他的特征.在我们掌握了这一章的概念之后,我们就为后面的套接口的高级主题做好了准备.在这一章,我们将会专注于下列主题: 如何使用getsockopt(2)函数获得套接口选项值 如何使用setsockopt(2)函数设置套接口选项值 如何使用这些常用的套接口选项 得到套接口选项 有时,一个程序需要确定为当前为一个套接口进行哪些选项设置.这对于一个子程序库函数尤其如此,因为这个库函数并不知道为这个套接口进行哪些设置

SQl Server 函数篇 数学函数,字符串函数,转换函数,时间日期函数

数据库中的函数和c#中的函数很相似 按顺序来, 这里价格特别的 print  可以再消息栏里打印东西 数学函数 ceiling()  取上限   不在乎小数点后面有多大,直接忽略 floor()     取下限   同上 round(列名,保留的位数)   四舍五入   保留小数最后那位数进不进一只看保留位数的后一位数够不够条件,再往后的就不管了 ABS()     绝对值---防抱死233 PI()        圆周率   就是查询一个圆周率 SQRT()平方根 字符串函数 upper()

C函数篇(wait函数)

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经 退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回:如果没有找到这样一个子进程,wait就 会一直阻塞在这里,直到有一个出现为止. 参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型

C函数篇(socket函数)

简述 创建一个套接口. #include <winsock.h> SOCKET PASCAL FAR socket( int af, int type, int protocol); af:一个地址描述.目前仅支持AF_INET格式,也就是说ARPA Internet地址格式. type:新套接口的类型描述. protocol:套接口所用的协议.如调用者不想指定,可用0指定,表示缺省. 注释       socket()函数用于根据指定的地址族.数据类型和协议来分配一个套接口的描述字及其所用的

C函数篇(select函数)

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等 待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回).可是使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回

C函数篇(fork函数)

一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: /* *  fork_test.c *  version 1