鱼C论坛

 找回密码
 立即注册
查看: 8694|回复: 6

[函数快查] strncpy -- 拷贝字符串(受限)

[复制链接]
发表于 2016-3-31 03:29:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
strncpy 函数文档


函数概要:

strcpy 函数一样,strncpy(dest, src, n) 函数将拷贝源字符串的 n 个字符到目标数组中。如果源字符串的长度小于 n,那么就用 '\0' 填充额外的空间。如果源字符串的长度大于或等于 n,那么只有 n 个字符被拷贝到目标数组中(注意:这样的话将不会以结束符 '\0' 结尾)。

小甲鱼温馨提示:为了使该函数更“安全”,建议使用 dest[sizeof(dest) - 1] = '\0'; 语句确保目标字符串是以 '\0' 结尾。

源字符串和目标数组的位置不应该重叠。


函数原型:

  1. #include <string.h>
  2. ...
  3. char *strncpy(char *dest, const char *src, size_t n);
复制代码


参数解析:

参数
含义
dest 指向存放字符串的目标数组
src 指向待拷贝的源字符串
n 指定拷贝的最大长度


返回值:

返回值是指向目标字符串的指针。


演示:

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char str1[] = "To be or not to be";
  6.         char str2[40];
  7.         char str3[40];

  8.         strncpy(str2, str1, sizeof(str2));
  9.         strncpy(str3, str2, 5);
  10.         str3[5] = '\0';

  11.         printf("%s\n", str1);
  12.         printf("%s\n", str2);
  13.         printf("%s\n", str3);

  14.         return 0;
  15. }
复制代码

搜狗截图20160331032857.png

版权归鱼C工作室(www.fishc.com)所有,转载请注明来源!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2017-8-28 15:09:10 | 显示全部楼层
本帖最后由 Bayesky 于 2017-8-28 15:11 编辑

似乎VS里面的strncpy函数会自己加'\0'呢,我试了好几个不手动添加'\0'的都没有报错。

更新:试了一下您给的例程,果然报错了。。。看来是运气问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2018-8-2 01:46:59 | 显示全部楼层
Bayesky 发表于 2017-8-28 15:09
似乎VS里面的strncpy函数会自己加'\0'呢,我试了好几个不手动添加'\0'的都没有报错。

更新: ...

确实是这样的我用code::blocks也是会自动添加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-2-15 21:21:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-2-22 10:35:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-4-16 16:47:59 | 显示全部楼层
一点疑问 如果这里把str3[5]='\0'去掉 程序输出结果没有变化,但是内在会出什么问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-5-24 17:26:41 | 显示全部楼层
Yth961102zxc 发表于 2020-4-16 16:47
一点疑问 如果这里把str3[5]='\0'去掉 程序输出结果没有变化,但是内在会出什么问题吗

这个你可以通过调试观察一下str3的值,理论上没有str3[5]='\0',最后一句除了To be,后面应该是输出乱码的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2020-11-27 04:10

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表