Как использовать длину массива в вычитании - PullRequest
0 голосов
/ 11 апреля 2020

Мой код ниже работает отлично, когда я пишу число или только внутри него. Тем не менее, я хочу написать (len-3), но он снова возвращается, как будто я пишу len внутри него. Как я могу решить это ?? Я получаю длину массива с помощью:

int len = sizeof(tmp)/sizeof(tmp[0]);

Переменная сообщения является строкой и получает:

char received = Serial.read();


    if (Index<(len-3)){
       message=tmp[Index++]=received;
       Serial.print(message);
                    }

Моя цель - написать dv35! 1234567890 * asdfqwertyuiopmnbvcx # asdas код должен возвращать ту его часть, которая находится между '!' и '#' тогда во время части if else код должен получить некоторые его части. Однако последняя часть должна возвращаться до 3 символов до конца массива. но это не сработало должным образом. он возвращает все оставшиеся части. (Как будто я пишу только len внутри него). длина входных данных нестабильна, поэтому часть сообщения изменяется в зависимости от длины всего массива. Он должен вернуть 3 символа до конца. Вот весь мой код:

char tmp[200] = {0};
String pack;
String command;
String Size;
String messum;
String message;
String checksum;
int len = sizeof(tmp)/sizeof(tmp[0]);
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);
                }
             }
    }
    return NULL;
    //input:  dv35!1234567890*asdfqwertyuiopmnbvcx#asdas
}

1 Ответ

0 голосов
/ 11 апреля 2020

большая часть этого не требуется.

  1. Вы определяете переменную tmp в глобальном масштабе, и она имеет постоянную длину. Вам не нужно рассчитывать длину.

  2. Для массива char sizeof(char_array) дает длину массива, поскольку sizeof(char) по определению 1

  3. Используйте правильные типы. для размеров используйте size_t не int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...