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