C语言字符initializer element is not constant 'Y', 'K', '-', '0', 'B', '-', MAC_D[5], MAC_D[4], MAC_D[3], MAC_D[2],串截取strncpy
时间: 2024-10-20 11:12:34 浏览: 25
netty-spring-mvc-master.rar_netty_netty spring_netty4 spring_s
C语言中的字符初始化元素不是常量错误通常是由于你在尝试初始化字符数组或者字符串时,包含了一个非常量表达式。在C语言中,字符初始值必须是字面量,比如单引号括起来的字符(如`'Y'`、`'K'`等),或者是常量表达式,但不能是运行时计算的结果。
`MAC_D[5]`, `MAC_D[4]`, ..., `MAC_D[2]`看起来像是一个数组名,如果`MAC_D`是一个指向字符的指针,并且它的索引部分不是已知的常量,那么这将被视为非常量初始化元素。`strncpy`函数用于从源字符串复制指定长度的字符到目标字符串,它需要明确的目标地址(即数组名),并且其长度必须是常量表达式。
错误可能是这样产生的:
```c
char str[] = "Y", 'K', '-', '0', 'B', '-', MAC_D[5], MAC_D[4], MAC_D[3], MAC_D[2]; // 这里 'Y', 'K', -... 都是不合法的初始化
```
正确的做法应该是:
```c
char MAC_ADDR[6] = {'Y', 'K', '-', '0', 'B', '-'}; // 如果MAC_D是一个数组,应该先赋值给某个变量再作为初始化内容
strncpy(str, MAC_ADDR, sizeof(MAC_ADDR)); // 或者直接初始化并指定数组长度
```
阅读全文