crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Изменение константного *char
Sokoloff
  опции профиля:
сообщение 1.4.2010, 16:50
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Переношу некоторые функции из чисто 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 работает по другому?

Сообщение отредактировал Sokoloff - 1.4.2010, 17:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 1)
Iron Bug
  опции профиля:
сообщение 1.4.2010, 18:52
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


читай тут про Portability:
http://www.cplusplus.com/reference/clibrary/cstring/strchr/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 17:04