strncpy -- 拷贝字符串(受限)
strncpy 函数文档函数概要:
和 strcpy 函数一样,strncpy(dest, src, n) 函数将拷贝源字符串的 n 个字符到目标数组中。如果源字符串的长度小于 n,那么就用 '\0' 填充额外的空间。如果源字符串的长度大于或等于 n,那么只有 n 个字符被拷贝到目标数组中(注意:这样的话将不会以结束符 '\0' 结尾)。
小甲鱼温馨提示:为了使该函数更“安全”,建议使用 dest = '\0'; 语句确保目标字符串是以 '\0' 结尾。
源字符串和目标数组的位置不应该重叠。
函数原型:
#include <string.h>
...
char *strncpy(char *dest, const char *src, size_t n);
参数解析:
参数含义
dest 指向存放字符串的目标数组
src 指向待拷贝的源字符串
n 指定拷贝的最大长度
返回值:
返回值是指向目标字符串的指针。
演示:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "To be or not to be";
char str2;
char str3;
strncpy(str2, str1, sizeof(str2));
strncpy(str3, str2, 5);
str3 = '\0';
printf("%s\n", str1);
printf("%s\n", str2);
printf("%s\n", str3);
return 0;
}
版权归鱼C工作室(www.fishc.com)所有,转载请注明来源!
本帖最后由 Bayesky 于 2017-8-28 15:11 编辑
似乎VS里面的strncpy函数会自己加'\0'呢,我试了好几个不手动添加'\0'的都没有报错。{:10_257:}
更新:试了一下您给的例程,果然报错了。。。看来是运气问题。。。 Bayesky 发表于 2017-8-28 15:09
似乎VS里面的strncpy函数会自己加'\0'呢,我试了好几个不手动添加'\0'的都没有报错。
更新: ...
确实是这样的我用code::blocks也是会自动添加
{:10_280:} {:10_265:} 一点疑问 如果这里把str3='\0'去掉 程序输出结果没有变化,但是内在会出什么问题吗 Yth961102zxc 发表于 2020-4-16 16:47
一点疑问 如果这里把str3='\0'去掉 程序输出结果没有变化,但是内在会出什么问题吗
这个你可以通过调试观察一下str3的值,理论上没有str3='\0',最后一句除了To be,后面应该是输出乱码的 {:10_303:}
{:10_336:} dest = '\0';
这个判据484应该改为:
dest == '\0';
保护狗头{:10_267:} 讲得好
2020.7.7 发表于 2021-2-2 12:36
dest = '\0';
这个判据484应该改为:
dest == '\0';
不对吧赋值的语句你改成判断了 条件表达式了 只要是关于str的函数,最后是不是都会自己加上'\0' {:10_256:} 想知道 dest = '\0' 和dest = '\0' 有什么区别 我感觉在strncpy函数使用上后者才是对的啊{:10_316:} dest = '\0';这个目的是啥我知道 但是这个是啥意思我到现在还不知道
Acacia 发表于 2020-2-15 21:21
{:5_97:} 为什么我这个str3打印的是be be
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "To be or not to be";
char str2;
char str3;
char str4;
strncpy(str2, str1, sizeof(str2));
strncpy(str3, str2, 5);
str3 = '\0';
strncpy(str4, str1, 5);
printf("str1:%s--%d\n", str1, strlen(str1));
printf("str2:%s--%d\n", str2, strlen(str2));
printf("str3:%s--%d\n", str3, strlen(str3));
printf("str4:%s--%d\n", str4, strlen(str4));
return 0;
}
str1:To be or not to be--18
str2:To be or not to be--18
str3:be be--5
str4:To be be--8 2020.7.7 发表于 2021-2-2 12:36
**** 作者被禁止或删除 内容自动屏蔽 ****
在这里,应该没啥区别
页:
[1]