Компиляция заданного образца кода с gcc/g ++ завершается успешно. Нет ошибки для вызова strchr
, который, очевидно, присваивает const char *
char *
.Почему C стандартная библиотечная функция `strchr` возвращает указатель на не-const, если задано` const char * `как первый аргумент?
Я нашел strchr
объявлен char * strchr(const char *, int)
на двух различных источников pubs.opengroup.org и cplusplus.com
Если strchr
реализуется как откинуть константность, то почему это так?
Если цель состояла в том, чтобы обеспечить функцию, которая работает как на строках char *
, так и на const char *
- это могло быть реализовано с использованием двух разных имен функций.
Можете ли вы дать более подробное объяснение этому.
#include <string.h>
int main() {
const char *str = "Sample string";
char * ptr;
//ptr = str; // Error: discards const qualifier - both on gcc and g++
pch = strchr(str,'S'); // Succeeds in assigning <const char *> to <char *>
*pch = '4'; // Runtime error: segmentation fault
return 0;
}
Пробовали на Win7 с помощью MSYS2/MinGW-w64 gcc_v5.3.0 и TDM-gcc32 v5.1.0.
Возможный дубликат [Как работает реализация strchr] (http://stackoverflow.com/questions/14367727/how-does-strchr-implementation-work) – Kninnug