возвращение const char * из функции в C - PullRequest
3 голосов
/ 25 января 2012

В моей библиотеке я должен вернуть строку вызывающим.Строка, которую я возвращаю, будет глобальным массивом, предполагаемое использование от вызывающей стороны - просто читать строку.Я не хочу, чтобы они изменили его ..

Это правильный способ объявить функцию ..

const char * get_some_details();

Это должно генерировать предупреждение (пробовал только gcc) либо когдаВызывающая функция присваивает возвращаемое значение char * ptr или присваивает const char * ptr, но позже пытается изменить его.

Я спрашиваю, потому что я ожидаю, что функции, такие как getenv (), вернут const char *.Но он возвращает символ *.Есть ли какие-то ошибки в возвращении const char *?

Ответы [ 2 ]

6 голосов
/ 25 января 2012

Возвращение const char* - это именно то, что нужно делать в этих обстоятельствах.

Многие более старые API не используют const, поскольку они предшествуют введению const в C90 (до этого не было const).

2 голосов
/ 25 января 2012

Это правильный способ сделать это.

Многие стандартные библиотечные функции принимают или возвращают char *, когда логически это должно быть const char *, по историческим причинам: до C89, не было const;после C89 их сигнатуры типов не могли быть изменены без нарушения кода приложения.Как правило, не использует стандартную библиотеку в качестве руководства по стилю;он очень старый и содержит много вещей, которые больше не считаются хорошей практикой.( кашель gets)

...