错误,字符数组显示 11 个字符而不是 12 个
Error, Char Array showing 11 chars not 12
我在arduino上写了一个程序,将字符串中的12个字符存储到char数组中,但似乎只复制了11个。这是代码:
const int NUMBER_OF_TAGS = 8;
const int TYPE_MASTER = 0;
typedef struct
{
char TAG[12];
byte TagType;
} stTAGdef;
stTAGdef Libary[NUMBER_OF_TAGS + 2] ; //(0 to 9)
void setup()
{
AddTag("4D0055754A27", 0, TYPE_MASTER);
Serial.begin(9600);
}
void loop()
{
int i=0;
String sDisplay(Libary[i].TAG);
/*Here it only prints 11 chars not 12*/
Serial.print(Libary[i].TAG);
while (1){}
}
void AddTag(String TAG, int Location, int tt)
{
TAG.toCharArray(Libary[Location].TAG, 12);
Libary[Location].TagType = (byte)tt;
}
您应该记住,基于字符数组的字符串以 null 结尾(因此它们的最后一个字符是 '\0'。
我想 Arduino 已经知道了,所以它会填充缓冲区,直到他有 space,然后停止转换。
你应该怎么办?这很简单:使用 12+1 字节缓冲区。
或者,如果您被迫拥有一个 12 字节的缓冲区,请不要使用 toCharArray 函数,而是一个一个地复制它。
我在arduino上写了一个程序,将字符串中的12个字符存储到char数组中,但似乎只复制了11个。这是代码:
const int NUMBER_OF_TAGS = 8;
const int TYPE_MASTER = 0;
typedef struct
{
char TAG[12];
byte TagType;
} stTAGdef;
stTAGdef Libary[NUMBER_OF_TAGS + 2] ; //(0 to 9)
void setup()
{
AddTag("4D0055754A27", 0, TYPE_MASTER);
Serial.begin(9600);
}
void loop()
{
int i=0;
String sDisplay(Libary[i].TAG);
/*Here it only prints 11 chars not 12*/
Serial.print(Libary[i].TAG);
while (1){}
}
void AddTag(String TAG, int Location, int tt)
{
TAG.toCharArray(Libary[Location].TAG, 12);
Libary[Location].TagType = (byte)tt;
}
您应该记住,基于字符数组的字符串以 null 结尾(因此它们的最后一个字符是 '\0'。
我想 Arduino 已经知道了,所以它会填充缓冲区,直到他有 space,然后停止转换。
你应该怎么办?这很简单:使用 12+1 字节缓冲区。
或者,如果您被迫拥有一个 12 字节的缓冲区,请不要使用 toCharArray 函数,而是一个一个地复制它。