Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ Изменение константного *char

Автор: Sokoloff 1.4.2010, 16:50

Переношу некоторые функции из чисто C-шного проекта в свой на C++.

В оригинальном проекте есть функция

static char *parseArglist(const char *buf)
{
    char *start, *end;
    int level;

    if (NULL == buf)
        return NULL;

    if (NULL == (start = strchr(buf, '('))) // <-- ошибка "некорректное преобразование из ‘const char*’ в ‘char*’"
        return NULL;

    for (level = 1, end = start + 1; level > 0; ++end)
    {
        if ('\0' == *end)
            break;
        else if ('(' == *end)
            ++ level;
        else if (')' == *end)
            -- level;
    }

    *end = '\0';

    return strdup(start);
}

Переношу к себе получаю ошибку "некорректное преобразование из ‘const char*’ в ‘char*’". Вроде понятно почему, т.к. параметр у функции "const char *buf", то для strchr выбирается константный вариант ( const char *strchr(const char *_s, int _c) ). А результат присваивается неконстантной переменной. Но мучает вопрос. Почему компилится сишная программа. Ведь "const char *buf" это указатель на константную строку, а в предпоследней строке мы меняем ее. Или в чистом C соnst работает по другому?

Автор: Iron Bug 1.4.2010, 18:52

читай тут про Portability:
http://www.cplusplus.com/reference/clibrary/cstring/strchr/

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)