如何获得用输入填充的数组的长度

问题描述 投票:-2回答:1

I have asked a question here,现在下面的代码完成了我期望的工作(我之前提到的工作)。现在,我还有另一个问题:如果我写tmp[20]并且输入的大小是20个字符,则代码可以工作。但是,输入的大小未知。因此,可以有一个maxsize,但是实际大小取决于输入。如何使此代码适用于所有长度? (是的,当我在tmp中写入200时代码可以工作,但'message'的大小取决于整个数组。结束前应为3个字符,开始后应为6个字符)。因此,当我在[[ C0],并且输入的字符数少于200个字符,则消息返回错误。我认为我应该使用动态内存分配,但无法在代码中实现它。

这是我的完整代码:

tmp[]
c++ arduino dynamic-memory-allocation
1个回答
0
投票

在将字符添加到数组中的任何地方:

char tmp[20] = { 0 };
int len = sizeof(tmp) / sizeof(tmp[0]);
String pack;
String command;
String Size;
String messum;
String message;
String checksum;

int Index = 0;
bool Seen = false;

void setup() {
    Serial.begin(9600);
}

void loop() {  
    while (Serial.available() > 0) {
        char received = Serial.read();

        if (received == '!') {
            Seen = true;
        } else
        if (received == '#') {
            return strdup(tmp);
        } else
        if (Seen == true) { 
            if (Index < 2) {
                //Serial.print("P");
                pack = tmp[Index++] = received;
                Serial.print(pack);
            } else
            if (Index < 4) {
                //Serial.print("C");
                command = tmp[Index++] = received;
                Serial.print(command);
            } else
            if (Index < 6) {
                //Serial.print("S");
                Size = tmp[Index++] = received;
                Serial.print(Size);
            } else
            if (Index < (len - 3)) {
                //Serial.print("M");
                message = tmp[Index++] = received;
                Serial.print(message);
            } else
            if (Index < len) {
                //Serial.print("C");
                checksum = tmp[Index++] = received;
                Serial.print(checksum);
            }  
        }
    }
    return NULL;
    //input:  asdeyh134!123456789abcdefghtry#8647dfn
}

您还应该像这样以空值终止字符串:

if (Seen == true) { 
            if (Index < 2) {
                //Serial.print("P");
                pack = tmp[Index++] = received;
                Serial.print(pack);

这样,您可以使用strlen获取数组中字符串的长度。它将计算直到该空字符的字符数。

if (Seen == true) { 
            if (Index < 2) {
                //Serial.print("P");
                pack = tmp[Index++] = received;
                tmp[Index] = 0;
                Serial.print(pack);

在循环的下一遍,当您写入另一个字符时,将在该null上写入它,然后在该新字符之后立即写入一个新的null。

© www.soinside.com 2019 - 2024. All rights reserved.