Кажется, что strtol() и strtod() эффективно позволяют (и заставляют) отказаться от константности в строке:
#include <stdlib.h>
#include <stdio.h>
int main() {
const char *foo = "Hello, world!";
char *bar;
strtol(foo, &bar, 10); // or strtod(foo, &bar);
printf("%d\n", foo == bar); // prints "1"! they're equal
*bar = 'X'; // segmentation fault
return 0;
}
Выше я не выполнял никаких забросов сам. Тем не менее, strtol() в основном превратил мой const char * в char * для меня, без каких-либо предупреждений или чего-то еще. (На самом деле, это не позволит вам ввести bar как const char * и, таким образом, вызовет небезопасное изменение типа.) Разве это не опасно?