一个数组的全部内容复制到另外一个数组

uchar Input_N_Valid_HL[4]="LLLL";	//错误
uchar Input_N_Valid_HL[5]="LLLL";	//正确

case 4:
		EEPROM_Read(EEPROM_String_2,8,8);
		sprintf(segString,%s,EEPROM_String_2);			//方法1:sprintf函数,将某个数组内容打印到另外一个数组(不推荐)
        sprintf(segString, "%s----", Input_N_Valid_HL);	//方法2:正常
		strcpy(segString,EEPROM_String_2);		//方法3:有时候不正常	strcpy字符串copy函数(推荐)
        strncpy(segString,EEPROM_String_2,4);	//方法4:都正常	strncpy指定字符串长度copy函数(推荐)
break;

/*
注意:
蚂蚁科技直接写sprintf(segString,EEPROM_String_2); 第二参数	这样严格来说是不错误的,容易引发未知性错误
*/

字符数组的初始化:

uchar Input_N_Valid_HL[]="LLLL";

uchar Input_N_Valid_HL[]={"LLLL"}

这两个的字符长度都是5,系统自动后面'\0'结束,

如果:

uchar Input_N_Valid_HL[4]="LLLL";

uchar Input_N_Valid_HL[4]={"LLLL"}

也是合法的,但是如果涉及后续处理很可能会出现意想不到的结果。

建议这样:

uchar Input_N_Valid_HL[5]="LLLL";
uchar Input_N_Valid_HL[5]={"LLLL"}

// ------------------------分 隔 符---------------------------

在 C 语言中,全局数组和静态局部数组在未初始化时,数组元素会被自动初始化为 0。
e.g1:
int segBuf[8]={0};

数组定义及初始化说明

  • 这里定义了一个名为 segBuf 的整型数组,其元素类型为 int,数组的长度为 8,表示这个数组可以存放 8 个整数。
  • 在初始化部分,使用 {0} 这种初始化列表的方式来给数组赋初值。当使用这样的方式且只给出一个值 0 时,按照 C/C++ 语言的初始化规则,会将这个初始值 0 赋给数组的第一个元素,也就是 segBuf[0] 的值为 0。对于其余未被用户初始化的数组元素,则默认也会被初始化为 0。

e.g2:

char segBuf[8]={0};

  • 定义了一个名为segBuf的字符数组。数组类型为char,长度为 8。
  • 初始化列表{0}表示将数组的第一个元素初始化为 0(ASCII 码值为 0 的字符就是空字符\0)。未在初始化列表中指定初始化的元素,则默认也会被初始化为 0(空字符\0)。
  • Tips:对于字符数组,0代表的是 ASCII 码值为 0 的字符,也就是空字符\0
posted @ 2024-12-15 19:56  iZJ"Qq4577105  阅读(2)  评论(0编辑  收藏  举报