[VC]strcpy和strncoy的区别

第一种情况:
char* p="how are you ?";
char
name[20]="ABCDEFGHIJKLMNOPQRS";

strcpy(name,p);    //name改变为"how are you ? OPQRS
"     
====>错误!
strncpy(name,p,sizeof(name))    
//name改变为"how are you ?      
"        ====>正确!

第二种情况:
char* p="how are you ?";
char name[20];

strcpy(name,p);     //name改变为"how are you ? 未知字符
"     
====>错误!
name[sizeof(name)-1]=‘"0‘      
//和上一步组合,得到正确的结果!
strncpy(name,p,sizeof(name));        
//name改变为"how are you ?      
"       ====>正确!

第三种情况:
char* p="how are you ?";
char name[10];

strcpy(name,p);       //name改变为"how are
yo"     
====>无结束符‘"0‘,错误!
name[sizeof(name)-1]=‘"0‘      
//和上一步组合,弥补结果。但要注意,字符传递错误!
strncpy(name,p,sizeof(name));      
//和单纯的一步strcpy结果一样!

总结:strcpy
如果源长>目标长,则将源长中等于目标长的字符拷贝到目标字符串
如果源长<目标长,则源长全部拷贝到目标字符串,不包括‘"0‘
strncpy
如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上‘"0‘

如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括‘"0‘

如果指定长>目标长,error happen!

时间: 2024-08-06 13:47:53

[VC]strcpy和strncoy的区别的相关文章

[VC]strcpy memcpy memset区别与简介

strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NULL结束的字符串复制到dest所指的数组中. 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串.       返回指向dest的指针.memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned int count);

strcpy和memcpy的区别

strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制.即memcpy对于需要复制的内容没有限制,因此用途更广. char * strcpy(char * dest, const char * src) // 实现src到dest的复制 { if ((src == NULL) || (d

strcpy和memcpy的区别(转载)

strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制.即memcpy对于需要复制的内容没有限制,因此用途更广.void *memcpy( void *dest, const void *src, size_t count )

sprintf、strcpy和memcpy的区别

做某题用到了sprintf把一个字符数组(字符串)写到二维字符数组里,然后耗时挺长的,想了想strcpy好像也可以,事实证明strcpy效率果然更高,然后想了想觉得memcpy好像也可以.实践了一下的确可以,效率不用说也比sprintf高,毕竟memcpy是对内存操作.然后我就百度了一下它们的区别,做个总结(记笔记). sprintf 可以用%s来实现格式化写入,其他两个做不到. strcpy 遇到\0结束(\0也被复制了),只能拷贝字符串. memcpy 根据size大小来复制,可以复制各种数

字符串处理函数strcpy()与strncpy()的区别

1.strcpy()将整个字符串复制到指定的缓冲区中,原型为:strcpy(str1,str2);其中str1为源数组,str2为目标数组. strncpy()将指定数目的字符从一个字符串复制到另一个字符串中,原型为:strncpy(str1,str2,number);用于将指定数目的字符复制到目标缓冲区中.

strcpy, mencpy, memmove三者区别

首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点: 1.判断指针的有效性 2.将复制后的指针地址返回,为了支持链式操作 3.不要忘记将字符串最后一个自负'\0'复制给dest 4.注意原字符串类型为const,保证在函数内部不会被修改 char* myStrcpy(char* dest, const char* src){ assert(dest!=NULL && src !=NULL); char* r = dest; while((*dest++ = *src++)!=

VC++ AfxBeginThread 与 CreateThread 的区别

简言之:AfxBeginThread是MFC的全局函数,是对CreateThread的封装.    CreateThread是Win32 API函数,前者最终要调到后者.具体说来,CreateThread这个 函数是windows提供给用户的 API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的Cre

vc和vs的区别。

vc和vs有什么区别? 搜idndd 3级 被浏览128次  2013.09.02 我有一个dsw文件,vc下可以正常运行,但用vs打开后无法运行,每次运行时就会显示"unable to start program......系统找不到指定文件". wcun520采纳率:50% 3级 2013.09.02 dsw就是Developer Studio Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,是一个纯文本的文件,在vc创建新项目的时候自动生成 VC:Visua

C语言中strcpy与memcpy函数实现与区别

C语言中strcpy与memcpy函数是怎么实现的又有哪些区别呢?下面就与我来简单的介绍下吧,希望大家多给点意见,欢迎评论纠正错误. 6.2 字符串与数组 字符串一般是用字符数组的方式存储,例如下面的str定义: char str[] = "123456"; 这里str是一个字符数组,它存放了一个字符串"123456",由于字符串还有一个结束符"\0",所以此数组的长度为7而不是6. 6.2.1 strcpy函数与memcpy函数 strcpy和