我在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;
}
答案 0 :(得分:0)
你应该记住,基于char数组的字符串是以null结尾的(因此它们的最后一个字符是' \ 0'。
我认为Arduino已经知道这一点,所以它填充缓冲区直到他有空间,然后停止转换。
你应该怎么做?这很简单:使用12 + 1字节的缓冲区。
或者,如果您被迫使用12字节缓冲区,请不要使用toCharArray函数,而是逐个复制它。