🔧 限制 🔧
上述 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);
}
🎋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
✅来一起看看调试结果说不定会更好点✅
我们把 Size_t 参数改为④来看看
printf(strncat(str1, str2, 4));
运行结果依旧和上述结果是一样的。
🎋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);
}