La especificación para strtol
conceptualmente divide la cadena de entrada en "espacios en blanco iniciales", una "secuencia de asunto" y una "cadena final", y define la "secuencia de asunto" como:Lenguaje confuso en la especificación de strtol, et al
la subsecuencia inicial más larga de la cadena de entrada, comenzando con el primer carácter de espacio no blanco que es de la forma esperada. La secuencia del asunto no contendrá ningún carácter si la cadena de entrada está vacía o si está formada exclusivamente por espacios en blanco, o si el primer carácter que no es de espacio en blanco es distinto de un signo o una letra o dígito permitidos.
En un momento me pareció que el negocio "más larga subsecuencia inicial" era similar a la forma en que funciona scanf
, donde "[email protected]"
escanearían como "0x"
, un partido fallido, seguido por "@"
como el siguiente carácter no leído. Sin embargo, después de un debate, estoy mayormente convencido de que strtol
procesa la subsecuencia inicial más larga que es de la forma esperada, no la cadena inicial más larga que es la subsecuencia inicial de alguna cadena posible de la forma esperada.
Lo que todavía me confunde es el lenguaje de la memoria:
Si la secuencia sujeto está vacío o no tiene la forma esperada, no se realiza ninguna conversión; el valor de str se almacena en el objeto apuntado por endptr, siempre que endptr no sea un puntero nulo.
Si aceptamos lo que parece ser la correcta definición de "secuencia sujeto", no hay tal cosa como una secuencia sujeto que no esté vacía que no tiene la forma esperada, y en su lugar (para evitar la redundancia y confusión) el texto debería simplemente leer:
Si la secuencia de asunto está vacía, no se realiza ninguna conversión; el valor de str se almacena en el objeto apuntado por endptr, siempre que endptr no sea un puntero nulo.
¿Alguien puede aclarar estos problemas para mí? Tal vez sería útil un enlace a discusiones pasadas o cualquier informe de defectos relevante.
Y un ejemplo normativo simple habría aclarado todo ... –
De hecho. Tengo la sensación de que el comité en realidad estaba tratando de evitar ser explícito por temor a abrir un argumento sobre cómo debería comportarse ... –