Weź np. execve (2), które zgodnie z POSIX ma ten prototyp [1]:Dlaczego argumenty argv i envp nie wyświetlają wskaźników na const?
int execve(const char *path, char *const argv[], char *const envp[]);
Dla mnie wydaje się, że
int execve(const char *path, const char *const argv[], const char *const envp[]);
byłaby oczywista poprawa.
Czy ktoś wie, dlaczego tak jest? Co może wyjaśnić potrzebę manipulowania danymi ciągami argv/envp?
[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html
[W odpowiedzi na twoje komentarze na temat usuniętej odpowiedzi] Och, rozumiem, co masz na myśli - tak, moja odpowiedź odnosi się do argumentów "głównego", a nie do argumentów "argv". To naprawdę jest pytanie C API, a nie pytanie o system Unix. Myślę, że odpowiedź jest po prostu historyczna kompatybilność z oryginalnymi, pre-const API. – Gilles
Ponieważ pytania dotyczące interfejsu API C (w przeciwieństwie do ogólnego projektu systemu) nie są tutaj tematem, głosuję za migracją do [tak]. (Nie odświeżaj, pytanie wkrótce zostanie przeniesione.) – Gilles
Prawdopodobnie niektóre programy mutują te bufory. –