Tomando primero su última pregunta, asegurando un tamaño máximo es bastante fácil. Normalmente desea utilizar fgets
para leer la cadena. Esto le permite especificar una longitud máxima. De forma alternativa, puede especificar un tamaño máximo en un formato de escaneo (por ejemplo, "%29s"
o "%29[^\n]"
). Tenga en cuenta la diferencia entre los dos: con fgets
, especifique el tamaño del búfer, pero con scanf
especifica uno menor que el tamaño del búfer (es decir, el número máximo de caracteres para leer).
En cuanto a la primera pregunta: sí, en general hay mejores maneras. strncpy
es una función extraña, originalmente escrita para un propósito bastante específico, y (para ser honesto) probablemente debería eliminarse de la biblioteca estándar, porque aunque parece como debería ser útil, casi nunca lo es.
Probablemente haga las cosas un poco diferente. Una posibilidad sería utilizar snprintf
, algo así como:
snprintf(
out_file_name,
sizeof(out_file_name),
"%*s",
strlen(FileName) - strlen(IN_FILE_SUFFIX), FileName);
¿Quiere decir anteponer? O extracción de cuerdas? ¿Truncar? –
Creo que te refieres a "truncar" (quieres eliminar elementos del final de la cadena, truncarlo a una longitud más corta, ¿no?) –
truncar - ese es el caso. Gracias. Lo siento, el inglés es mi primer idioma ... sí primero, por eso es tan malo. –