0
点赞
收藏
分享

微信扫一扫

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)

🔧 限制 🔧

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

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

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

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

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_字符串

🎋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'

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

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_字符串_04

我们再来看下一个例子 👇 

#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 类型大小为一个字节!

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

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_代码示例_05

🎋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);
}

 🎋strncat() - 连接字符串(受长度限制)🎋

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

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

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 的长度为止。

dest→指向目标数组,该数组包含了一个 C语言 字符串,且足够容纳追加后的字符串,包括额外的空字符。

src→要追加的字符串。

n→追加的最大字符串。

Size_t→是一个无符号(unisgned int)整型类型。 

该函数返回一个指向最终的目标字符串 dest 的指针。

注意:这里的返回值的指针类型可以是void也可以是char *🧨

🎋strncat()函数代码示例🎋

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
char str1[20];
char str2[20];
strcpy(str1, "Cyuyan");
strcpy(str2, "yyds");
printf(strncat(str1, str2, 5));//追加字符串!
return 0;
}

运行结果如下 👇 

Cyuyanyyds 

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

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_字符串_08

我们把 Size_t 参数改为④来看看

printf(strncat(str1, str2, 4));

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_字符串_09

运行结果依旧和上述结果是一样的。 

【C语言】strncpy() - 复制字符串(受长度限制) strncat() - 连接字符串(受长度限制)_#include_10

🎋strncat()源程序实现🎋 

示例代码如下:👇

char * __cdecl strncat (
char * front,
const char * back,
size_t count
)
{
char *start = front;

while (*front++)
;
front--;

while (count--)
if (!(*front++ = *back++))
return(start);

*front = '\0';
return(start);
}



举报

相关推荐

0 条评论