常用函数库文件汇总___string.h

本文详细对比了C语言中strlen()函数和sizeof()操作符的区别,包括它们的功能、使用场景及注意事项。同时介绍了memset()函数在数据清零方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sizeof()和strlen()区别   

1.    strlen 是函数,strlen(char*)函数求的是字符串的实际长度,直到遇到第一个'\0',然后就返回计数值,且不包括'\0',函数的返回值值在运行时确定。参数是指针或字符数组,当数组名作为参数传入时,实际上数组就退化成指针了。

2.      sizeof是操作符,不是函数,返回的是变量声明后所占的内存数,不是实际长度。其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。当计算数组的size时,数组不会退化成指针。

strlen()是返回字符串的字节长度,   
strlen()是返回字符串的字符长度。   
也就是说第二个函数可能和第一个函数结果一样,如果字符串中字符单位都是单字节的话。   

sizeof()不需要头文件,单目运算符

1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组的元素个数。如果是一个指针的话,则输出在该系统中地址的字节宽度。

如下代码:则会以输出4, 30, 4

    int *a;
    char b[30];
    char *c;

    printf("%d, %d, d\n", sizeof(a), sizeof(b),sizeof(c));

 

#include <string.h>

strlen ()

# include<stdio.h>
# include<malloc.h>
# include<string.h>


int main(void)
{
	char * c1 = "AbSjhhss";
	int len1 = strlen(c1);
	printf("len1 = %d\n", len1);     //len1 = 8


	char c2[] = {'a', '4', 'r', 't', 'd'};
	int len2 = strlen(c2);
	printf("len2 = %d\n", len2);    //..error..len2 = 9


	char c3[] = {'a', '4', 'r', 't', 'd', '\0'};
	int len3 = strlen(c3);
	printf("len3 = %d\n", len3);   //len3 = 5


	char c4[10] = "AbS";
	int len4 = strlen(c4);
	printf("len4 = %d\n", len4);   //len4 = 3 


	char c5[4];
	int len5 = strlen(c5);
	printf("len5 = %d\n", len5);  //len5 = 5
/*
	c5[0] = '\0';
	len5 = strlen(c5);
	printf("len5 = %d\n", len5);  //len5 = 0
*/
	c5[4] = '\0';
	len5 = strlen(c5);
	printf("len5 = %d\n", len5);  //len5 = 4


	return 0;
}

总结:如果字符数组,
   1.用字符串(双引号"")初始化,用strlen函数可以求出该字符串的长度
   2.用字符数组的形式({'',''})初始化,必须在最后面添加一个元素'\0'才可以。

所以:strlen() 从字符数组首地址开始,一直找下去,直到遇到'\0'才停止

 

 

② memset它对较大的结构体或数组进行清零操作的一种最快方法。

 

:为何要用memset置零?

答:1.如果不清空,可能会在测试当中出现野值。

2.其实不然!特别是对于字符指针类型的,剩余的部分通常是不会为0的,不妨作一个试验,定义一个字符数组,并输入一串字符,如果不用memset实现清零,使用MessageBox显示出来就会有乱码(0表示NULL,如果有,就默认字符结束,不会输出后面的乱码)

 

 

struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};

对于变量:
struct sample_strcut stTest;

一般情况下,清空stTest的方法:

stTest.csName[0]='/0';
stTest.iSeq=0;
stTest.iType=0;

用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:

struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值