
头文件: #include
strncpy()用于复制字符串的前n个字符. 它的原型是:
char * strncpy(char * dest,const char * src,size_t n);
[参数说明] dest是目标字符串指针,而src是源字符串指针.

strncpy()将字符串src的前n个字符复制到字符串dest.
与strcpy()不同,strncpy()不会将结束标记'\ 0'附加到dest上strncpy函数,这引起了许多不合理的问题,将在以下示例中进行解释.
注意: src和dest指向的存储区域不能重叠strncpy函数,dest必须有足够的空间来容纳n个字符.
[返回值]返回字符串dest.

[功能示例]复制4组字符串.
#include<stdio.h>
#include<string.h>
int main(void){
char dest1[20];
char src1[] = "abc";
int n1 = 3;
char dest2[20]="********************";
char src2[] = "abcxyz";
int n2 = strlen(src2)+1;
char dest3[100] = "http://see.xidian.edu.cn/cpp/shell/";
char src3[6] = "abcxyz"; // 没有'\0'
int n3 = 20;
char dest4[100] = "http://see.xidian.edu.cn/cpp/u/yuanma/";
char sr[] = "abc\0defghigk";
int n4 = strlen(src3);
strncpy(dest1, src1, n1); // n1小于strlen(str1)+1,不会追加'\0'
strncpy(dest2, src2, n2); // n2等于strlen(str2)+1,恰好可以把src2末尾的'\0'拷贝到dest2
strncpy(dest3, src3, n3); // n3大于strlen(str3)+1,循环拷贝str3
strncpy(dest4, sr, n4); // sr中间出现'\0'
printf("dest1=%s\n", dest1);
printf("dest2=%s, dest2[15]=%c\n", dest2, dest2[10]);
printf("dest3=%s\n", dest3);
printf("dest4=%s, dest4[6]=%d, dest4[20]=%d, dest4[90]=%d\n", dest4, dest4[6], dest4[20], dest4[90]);
return 0;
}
VC6.0运行结果:


MinGW结果:

从以上结果中可以看出,strncpy()难以控制并且行为异常. 使用strncpy()的最安全方法是使n等于strlen(src)+1,也就是说,复制整个字符串并将'\ 0'附加到dest. 但这没什么不同. 如果必须实现复制字符串的前n个字节的功能,则可以在Linux下使用strlcpy(). strlcpy()不是标准函数. 在Windows下不可用. 您需要对其进行自定义. 请参考: 定制函数以实现strncpy()函数的功能并消除其缺陷.
NdkDemo代码已上传到Github

如果有任何不当支出,请留言以交流!
我的GitHub
我的CSDN
我的简书
发展笔记
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-145501-1.html
明天我就叫几个兄弟去你家提亲
这好比日本车与纯国产车