Obtener subcadena en C
-
Usa la función
strncpy
para obtener la subcadena en C - Usar una función personalizada para obtener una subcadena en C
Este artículo presenta varios métodos para obtener una subcadena en C.
Usa la función strncpy
para obtener la subcadena en C
strncpy
es parte de la función de la biblioteca de cadenas de C definida en el archivo de cabecera <string.h>
. Copia el número dado de bytes de la cadena de origen al destino. strncpy
toma tres parámetros - el char*
de destino, el puntero de origen, y el número entero para denotar el número de bytes a copiar. Si el número de bytes especificado es mayor que el que contiene la cadena de origen, se almacenan bytes nulos adicionales en el destino.
La función strncpy
devuelve el puntero a la cadena de destino; así, podemos encadenar la llamada a la sentencia printf
para imprimir directamente la subcadena. El siguiente ejemplo demuestra cómo imprimir la primera subcadena de cuatro caracteres y luego la siguiente subcadena de 10 caracteres.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *tmp = "This string literal is arbitrary";
int main(int argc, char *argv[]) {
char *str = malloc(strlen(tmp));
printf("%s\n", strncpy(str, tmp, 4));
printf("%s\n", strncpy(str, tmp + 5, 10));
free(str) exit(EXIT_SUCCESS);
}
Producción :
This
string lit
Usar una función personalizada para obtener una subcadena en C
Alternativamente, podemos definir una función personalizada para strncpy
y especificar una nueva interfaz de cuatro parámetros. En concreto, la función getSubstring
tomará las cadenas destino y origen más dos enteros que especifican las posiciones inicial y final de los caracteres necesarios como subcadena. Tenga en cuenta que este prototipo de función no implementa una comprobación de errores adicional, sino que devuelve directamente el puntero char*
pasado desde la llamada strncpy
.
Al igual que en el ejemplo anterior, getSubstring
también puede encadenarse a la función printf
como argumento. Una advertencia con respecto a strncpy
es que las cadenas de destino y origen no deben superponerse en la memoria. Además, el puntero de destino debe apuntar a un buffer lo suficientemente grande como para almacenar la cadena de origen.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *tmp = "This string literal is arbitrary";
char *getSubstring(char *dst, const char *src, size_t start, size_t end) {
return strncpy(dst, src + start, end);
}
int main(int argc, char *argv[]) {
char *str = malloc(strlen(tmp));
printf("%s\n", getSubstring(str, tmp, 0, 4));
printf("%s\n", getSubstring(str, tmp, 5, 10));
free(str);
exit(EXIT_SUCCESS);
}
Producción :
This
string lit
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook