Кажется, что 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 *
и тем самым вызвать небезопасное изменение типа.) Разве это не так опасно?