首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要使用strncpy而不是strcpy?

为什么要使用strncpy而不是strcpy?
EN

Stack Overflow用户
提问于 2018-05-04 04:38:39
回答 2查看 0关注 0票数 0

我已经为这个例子添加了源代码:

代码语言:txt
复制
char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );

输出:

代码语言:txt
复制
destination is originally = 'abcdefg'
After strcpy, destination becomes '123456789'

destination1 is originally = 'abcdefg'
After strncpy, destination1 becomes '12345fg'

使用strncpy()而不是strcpy()有什么优势?

EN

回答 2

Stack Overflow用户

发布于 2018-05-04 13:25:03

strncpy通过要求你输入一个长度来对抗缓冲区溢出。strcpy取决于尾随\0,这可能并不总是发生。

其次,为什么你选择只复制7个字符串中的5个字符,但它产生了预期的行为。它只是复制第一个n字符。

票数 0
EN

Stack Overflow用户

发布于 2018-05-04 13:47:29

strncpy()函数在设计时考虑了一个非常特别的问题:操作以原始UNIX目录条目的方式存储的字符串。这些使用了一个固定大小的数组,并且只有在文件名比数组短的情况下才使用nul终结符。

对于“strcpy()”,你最好使用strncat()像这样的:

代码语言:javascript
复制
if (dest_size > 0)
{
    dest[0] = '\0';
    strncat(dest, source, dest_size - 1);
}

这将永远终止结果,并且不会超过必要的复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档