co jest nie tak? [temat wątku]

0

Co tu jest nie tak? Niby działa, jednak gdy długość komendy jest większa niż COMMAND_MAX_LENGTH pojawia się dziwny błąd:
gdy komenda ma długość np. 33 wypisywane jest dwa razy "too_long" i dodatkowo kocówka stringu komenda. Co muszę zrobić aby informowało użytkownika, że wpisał za długą komendę i nie podejmowało żadnych dodatkowych działań? Czy da się zrobić tak by funkcja GetLine() przerywała pracę w momencie przekroczenia długości a nie tylko po wciśnięciu entera?

#include <iostream>
#include <stdlib.h>
#include "Interpreter.h"

    #define COMMAND_MAX_LENGTH 16
    #define ENTER '\n'
    #define TRUE 1
    #define FALSE 0
    #define FAULT -1

int GetLine(char string[COMMAND_MAX_LENGTH])
{
    int i = 0;
    int too_long = 0;
    char ch = '\0';

    for(i=0; ch != ENTER ;)
    {
        ch = getchar();
        string[i] = ch;
        if(i == (COMMAND_MAX_LENGTH - 1))
        {
            too_long = 1;
            break;
        }
        ++i;
    }
    i--;
    string[i] = NULL;
    if(too_long)
        return FAULT;
return i;
}


int main(int argc, char *argv[])
{
    char *komenda;
    int dlugosc_komendy = 0;
    int error_code = 0;
    Interpreter Interpreter_Komend; //obiekt klasy interpreter

    do {
        if((dlugosc_komendy = GetLine(komenda)) == FAULT)
        {
            printf("too long\n");
        } else
        {
            if(strcmp(komenda,"koniec"))
                error_code = Interpreter_Komend.Komendy(komenda, dlugosc_komendy);
        }
    } while (strcmp(komenda,"koniec"));

  return 0;
}

-----------------------------------
//interpreter.h:

#ifndef _Interpreter_h_
#define _Interpreter_h_

class Interpreter {
    public:
        int Komendy(char *komenda, int dlugosc_komendy);
    protected:

    private:

};

#endif //_interpreter_h_

-----------------------------------
//interpreter.cpp:

#include <stdio.h>
#include "Interpreter.h"

int Interpreter::Komendy(char * komenda, int dlugosc){
    switch (komenda[0])
    {
        case '?':
            printf("Komenda pomocy\n");
            break;
        default:
            printf("Tu interpreter. Aktualna komenda: %s\n", komenda);
    }
    return 0;
}
0

Witam!
Nie wiem czy to coś pomoże, zauważyłem parę potencialnych błędów:
zamiast

int GetLine(char string[COMMAND_MAX_LENGTH]);

napisz

int GetLine(char *string);

a zamist

char *komenda;

napisz

char komenda[COMMAND_MAX_LENGTH];
memset(komenda, 0, COMMAND_MAX_LENGTH);

Może pomoże, na pewno nie zaszkodzi :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1