strncpy()

276 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

🚩write in front🚩

🔎大家好,我是泽奀,希望你看完后。能对你有所帮助,不足请指正,共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜77»总榜1766🏅
🆔本文由 謓泽 原创 掘金/CSDN/infoQ 如需转载还请通知⚠
📝个人主页-掘金 (juejin.cn)💬
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏-[C系列] 从0到1 - 泽奀的专栏 - 掘金 (juejin.cn)🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

 🔧 限制 🔧

上述 strcpy、strcat、strcmp、长度是不受限制的字符串函数

而下面所说的是长度受限制的字符串函数了>>>

起始记住下面这个只需要在上面的基础上加上个str后面+n即可(^∀^●)ノシ

下面所介绍的3种函数相对比上的使用要更加安全,但并不是绝对安全。


🎋strncpy() - 复制字符串(受长度限制)🎋

这个函数实际上和strcpy() 的功能是一模一样的,唯一不同的是在于strncpy() 多了一个参数,那个参数就是受长度所限制的。

**strncpy() **函数的声明方式如下 👇

char *strncpy(char *dest, const char *src, size_t n)

把 src 所指向的字符串复制到 dest,最多复制 n 个字符。

当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

dest → 指向用于存储复制内容的目标数组。

src → 要复制的字符串。

n → 要从源中复制的字符数。

Size_t→是一个无符号整型类型。

该函数最终返回所复制的字符串。 

🎋strncpy()函数代码示例🎋

使用 ****strncpy() ****函数代码示例如下 👇

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[20] = "helloC";
	char str2[] = "HELLO";
	printf("字节=%d\n", sizeof(str2));
	printf("str = %s\n",strncpy(str1, str2, sizeof(str2)));
	return 0;
}

运行结果如下 👇 

字节 = 6

str = HELLO

sizeof(str2) 相当于为 6个字节,因为 char 为一个字节 里面元素有6个包括'\0'

✅来一起看看调试结果说不定会更好点✅

​编辑

我们再来看下一个例子 👇 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[20] = "helloC";
	char str2[] = "HELLO";
	printf("字节=%d\n", sizeof(char));
	printf("str = %s\n", strncpy(str1, str2, sizeof(char)));
	return 0;
}

运行结果如下 👇 

字节 = 1

str = HELLO

sizeof(char) 结果为一个字节,因为 char 类型大小为一个字节!

✅来一起看看调试结果说不定会更好点✅

​编辑

🎋strncpy()源程序实现🎋 

示例代码如下:👇

char * __cdecl strncpy (
        char * dest,
        const char * source,
        size_t count
        )
{
        char *start = dest;

        while (count && (*dest++ = *source++))    /* copy string */
                count--;

        if (count)                              /* pad out with zeroes */
                while (--count)
                        *dest++ = '\0';

        return(start);
}