记录一些嵌入式笔试要点

本文深入探讨了字符数组、字符串及字符串指针的区别,重点分析了sizeof与strlen函数的应用场景及差异。通过代码实例,清晰展示了不同数据类型在内存中的表现形式及测量长度的方法。

一、字符数组、字符串、字符串指针的区别,以及sizeof和strlen的区别

1、sizeof(字符串)有包含‘\0’,而strlen(字符串)不包含'\0'。
2、sizeof()对这3种定义的区别在下面的小代码中。
3、strlen()对这3种定义的结果都是一样的。
代码如下:
#include<stdio.h>
#include<string.h>

int main()
{
	char a[10] = "123456";
	char b[] = "123456";
	char *c = "123456";

	printf("sizeof(a): %ld\n",sizeof(a));
	printf("sizeof(b): %ld\n",sizeof(b));
	printf("sizeof(c): %ld\n",sizeof(c));
	
	printf("strlen(a): %ld\n",strlen(a));
	printf("strlen(b): %ld\n",strlen(b));
	printf("strlen(c): %ld\n",strlen(c));
	
	return 0;
}

运行结果:
在这里插入图片描述

小结:sizeof()结果不一样的原因:

1、a和b都是字符数组,a的大小在赋值之前就确定了,b的大小是根据后面的字符串大小加上那个‘\0’组成的。
2、c是字符指针,跟数组有点差别,我的环境是64位的,所以指针大小也是64位,sizeof( c ) = 8。

额外记录关于malloc的一点,字符数组不能用(char *)malloc(num)来申请空间,因为字符数组的空间在定义的时候已经确定了,无法再次修改。而字符指针可以。

二、重写strcpy()函数。

char* strcpy(char* Desk, const char* Src)
{
	char *p = Desk;		//Desk用于返回
	if(NULL == Desk || NULL == Src)
		return -1;
	while((*p++ = *Src++) != '\0');
	return Desk;
}

想到其他题再补充》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值