错误,Char数组显示11个字符不是12

时间:2015-03-24 15:05:50

标签: arrays string char arduino

我在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;
}

在线版:https://codebender.cc/sketch:97071

1 个答案:

答案 0 :(得分:0)

你应该记住,基于char数组的字符串是以null结尾的(因此它们的最后一个字符是' \ 0'。

我认为Arduino已经知道这一点,所以它填充缓冲区直到他有空间,然后停止转换。

你应该怎么做?这很简单:使用12 + 1字节的缓冲区。

或者,如果您被迫使用12字节缓冲区,请不要使用toCharArray函数,而是逐个复制它。