数组与字符串

本文介绍了如何在C语言中使用`sub_str`函数一次性提取字符串中的多个子串,以及字符数组和字符串的关系,特别提到了KEIL编译器在处理中文字符串时的常见问题——0xFD乱码。还讨论了数组区间初始化的不同方式。
摘要由CSDN通过智能技术生成
  • 一次性提取长字符串中的多个短字符串
unsigned char sub_str(unsigned char *pos, char *str)
{
	unsigned char len = strlen(str);
	unsigned  char n = 0, i = 0;
	for(;i < len;i++)
	{

		if(str[i] == ' '){
			str[i] = 0;			
			pos[n++] = (i + 1);
			printf("i = %d,pos[%d] = %d \r\n",i,n,pos[n]);
			
		}
	}
	return n;
}

unsigned char pos[10] = {0};
char str[30];
strcpy(str,"abc 1000 50 off 2500");
sub_str(pos,str);
//printf("%s\r\n",str);
printf("%s\r\n",str + pos[0]);
printf("%s\r\n",str + pos[1]);
printf("%s\r\n",str + pos[2]);
printf("%s\r\n",str + pos[3]);
  • 字符数组和字符串

字符串时一种有特定约束的字符数组(字符串最后一个字符为\0)

/* 字符数组与字符串两者时基本等价的 */
char str1[10]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char *str2 = "0123456789ABCDEF"//相当于{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','\0'};

  • 字符串 + 转义字符可以表达任何数据序列
uint8_t buf[10] = {0x12,0x34,0x56,0x78};
char *str_buf = "\x12\x34\x56\x78";

printf("0x%x 0x%x 0x%x 0x%x\r\n",str_buf[0],str_buf[1],str_buf[2],str_buf[3]);
//0x12 0x34 0x56 0x78

/*
	\x 转义序列
    \x 转义序列是用于表示字符的十六进制值的方法。它的形式是 \x 后跟两个十六进制数字,用于表示一个字符。这通常用于字符串中,以表示包含特殊字符的字符序列。
*/
  • KEIL在中文字符串上的一个常见bug

0xFD问题,凡是汉字内码低位为FD的均会出现乱码

  • 数组的区间初始化
//一般操作
#define MAX (10)
int  buf[MAX] = {0xaa,0xff};
buf[MAX - 3] = 0x12;
buf[MAX - 2] = 0x34;
buf[MAX - 1] = 0x56;

//二般操作
#define MAX (10)
int bump[MAX] = {0xaa,0x55,[MAX -3]=0x12,0x34,0x56};
  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值