C/C++/linux易错整理

1.int与unsigned int隐式转换
int main()
{
 	unsigned int a = 6;
 	int b = -20;
 	(a+b)>6?printf(">6\n"):printf("<6\n");
 	return 0;
} 

结果是  >6

https://blog.youkuaiyun.com/yinzewen123/article/details/80547836

2.向指定地址写入数据

在地址0x100上写入0x200

#include "stdio.h"

int main()
{
	int *p;//定义一个整形指针

	p = (int *)0x100;//将常量0x0019FF3C强制转化为整形地址,用p指向它
	*p = 0x200;//向该地址写入数据
	printf("%x\n",*(int *)0x100);//输出0x0019FF3C地址的数据

	return 0;
}

3.
char a[1000];
for (int i = 0; i < 100; i++){
	a[i] = -1 - i;
}
问:strlen(a)

a[255]==0;而strlen遇到’\0’(对应数值0)结束;所以是255.

4.大端字节序(big endian)和小端字节序(little endian)。

大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后。

#include<stdio.h>
#define LBS 0
#define MBS 1
{
	int main(int)
{
	int a=0x12345678;
	char *p;
	p = (char *)&a;
	if(*p == 0x12){   //大端
		return MBS;
	}else if(*p == 0x78){   //小端
		return LBS;
	}
}

5.内存对齐问题和修改默认对齐数
struct A{
	char c;
	int a;
};

32位操作系统上结构体大小为8

可以通过# pragma pack(1)修改默认对齐数将结构体大小变为5
ps:默认对齐数可以为1/2/4/8/16

6.strcpy和memcpy的区别

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值