strcpy/strncpy/strcat/strncat/memcpy这类库函数

首先列出这些常用库函数的函数原型
strcmp
string.h
int strcmp(const char *s1, const char *s2);
负数、零还是正整数,依赖于 s1 所指向的字符串是小于、等于还是大于 s2 所指的字符串。
strncmp
string.h
int strcmp(const char *s1, const char *s2, size_t n);
负整数、零还是正整数,依赖于 s1 所指向的数组的前 n 个字符是小于、等于还是大于s2 所指向的数组的前 n 个字符。如果在其中某个数组中遇到空字符,比较都会停止。
strcpy
string.h
char *strcpy(char * dst, const char * src);
返回dst指向目的的指针。
函数原型:

char *strcpy(char *dst, const char *src)
{
	assert((dst != NULL) && (src != NULL));
	char * tmpdst = dst;
	if (dst == src) {
		return dst;
	}
	
	while(((*dst++) = (*src++) != '\0')) {
		NULL;
	}
	
	return tmpdst;
}

strncpy
string.h
char *strncpy(char * dst, const char * src, size_t n);
返回dst指向目的的指针。
strcat
string.h
char *strcat(char * dst, const char * src);
strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。返回dest 字符串起始地址.
strncat
string.h
char *strcat(char *dst, const char * src, size_t n);
同上,只是追加n个字符。
strlen
string.h
size_t strlen(const char * s);
返回字符串长度,以\0截止(不包括\0)。
sizeof
sizeof(类型说明符);
sizeof 表达式;
返回的是所占的内存空间;
strlensizeof的区别,前者计算字符串的真实长度,后者计算说明符所占内存空间。
FEP:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char a[20] = "0123456789";
    printf("%d %d\n", sizeof(a), strlen(a));
}
结果是20,10

又或者

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int a[20] = {};
    printf("%d %d\n", sizeof(a), strlen(a));
}
结果是80,0

memcmp
string.h
int memcpy(const char* s1, const char *s2, size_t n);
负整数、零还是正整数依赖于 s1 所指向对象的前 n 个字符是小于、等于还是大于 s2 所指向对象的前 n 个字符。
memset
string.h
void *memset(void *s, int c, size_t n);
指向内存块s的指针。
函数实现:

void* memset(void* dst,int val, size_t count)
{
    void* ret = dst; //用ret指针来保存dst的地址
    while(count--)
    {
        *(char*)dst = (char)val;
        dst = (char*)dst + 1; //移动一个字节
    }
    return ret;
}

memcpy
string.h
void* memcpy(char * dst, const char* src, size_t n);
返回s1指针。
函数实现:


void* memcpy(char * dst, const char* src, size_t n)
{
	if ((dst == NULL) && (src == NULL)) {
		return -1;
	}
	
	unsigned char *dst1 = (unsigned char*) dst;
	unsigned char *src1 = (unsigned char*) src;
	
	while(n--) {
		*dst1 = *src1;
		dst1++;
		src1++;
	}

	return dst1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值