реализация лексера, но нужна помощь в удалении комментариев из ввода

Я реализую лексер для простого языка программирования в c, в основном что-то, что читает токены и идентифицирует их как символы, числа, зарезервированные слова и т. д. Я сделал эту часть и работаю, но у меня проблемы с предыдущим шагом он лексизирует ввод. А именно я должен сначала найти любые комментарии во входном программном коде и заменить символы комментариев (которые одинаковы в c) и все, что между ними, пробелом. Однако, когда я попытался сделать это, это выглядело очень странно. Я почти уверен, что это потому, что я давно не использовал c, и я, вероятно, запутался в том, как он обрабатывает память или что-то в этом роде, поэтому любая помощь будет оценена по достоинству.

Также я знаю, что в c есть встроенная функциональность токена, но мне не разрешено использовать ее здесь, если кто-нибудь предложит исправление, которое ее использует.

//function to remove comments from input code
    void makeClean(char *clean)
    {
        int i = 0;
        while (clean[i] != '\0' && i < 500)
        {
            if (clean[i] == '/' && clean[i + 1] == '*')
            {
                while ((!(clean[i] == '*' && clean[i + 1] == '/')) && i < 500)
                {
                    clean[i] = ' ';
                    i++;
                }
                clean[i] = ' ';
                clean[i + 1] = ' ';
                i++;
            }
            i++;
        }
    }
    //main
    int main(int argc, char **argv)
    {
        char input[500];
        //char *clean = input;
        int i = 0;
        char flag1[9];
        char flag2[9];
        char temp[500];
        while (argv[1][i] != '\0')
        {
            input[i] = argv[1][i];
            i++;
        }
        char *clean = input;
        //getting possible flags
        for (i = 0; i < 17; i++)
        {
            if (i < 8)
                flag1[i] = input[i];
            if (i > 8)
                flag2[i - 9] = input[i];
        }
        flag1[9] = '\0';
        flag2[9] = '\0';
        //flag checks
        if (strcmp(flag1,"--source") == 0 || strcmp(flag2,"--source") == 0)
            printf("source code:\n------------\n%s\n\n",input);
        if (strcmp(flag1,"--clean") == 0 || strcmp(flag2,"--clean") == 0)
        {
            makeClean(clean);
            printf("source code without comments:\n-----------------------------\n%s\n\n",clean);
        }
        //outputting tokens and types
        printf("tokens:\n-------\n\n");
        lex(clean);
        return 0;
    }

person WalterC    schedule 17.11.2016    source источник
comment
@chux, если честно, я даже не знаю, почему у меня это было, я, наверное, устал или что-то в этом роде. Я избавился от этого, но у меня все та же проблема, что и раньше   -  person WalterC    schedule 18.11.2016
comment
Я предполагаю, что это должно быть домашнее задание или что-то в этом роде, но просто чтобы дать очевидный ответ… почему бы просто не использовать cpp, как это делает C…?   -  person BRPocock    schedule 18.11.2016
comment
Подсказка: просмотрите, какие значения имеет i и как выглядит ваш буфер, когда вы закрашиваете "x/*y*/z". Почти уверен, что вы «забегаете вперед».   -  person BRPocock    schedule 18.11.2016
comment
stackoverflow.com/q/25860644/971127   -  person BLUEPIXY    schedule 18.11.2016
comment
@BRFennPocock, не могли бы вы рассказать немного подробнее? Это и строка над ней должны очистить символ конечного комментария, или я ошибаюсь?   -  person WalterC    schedule 18.11.2016