Estoy tratando de implementar una versión eqivilent de la función chomp()
de perl en C y he encontrado un caso de esquina donde un literal de cadena pasó ya que el argumento causará un error de segmentación (con razón).¿Cómo detectar el paso de un literal de cadena a una función en C?
Ejemplo chomp("some literal string\n");
¿Hay una manera definida en C99 para detectar tiempo o no mi función fue aprobada una cadena literal de modo que pueda return
sin intentar NUL a cabo?
char* chomp(char *s)
{
char *temp = s;
if (s && *s)
{
s += strlen(s) - 1;
if (*s == '\n')
{
*s = '\0';
}
}
return temp;
}
Impar. ¿No debería su compilador evitar que se pase un literal de cadena como un argumento que no está declarado como 'const char *'? –
@ Adam Maras: Eso no es requerido por el estándar. Sin embargo, tratando de modificar el mismo es UB. – dirkgently
Adam Maras: En C simple, los literales de cadena tienen el tipo 'char *', no 'const char *'. – caf