Obtenez la sous-chaîne en C
-
Utiliser la fonction
strncpy
pour obtenir une sous-chaîne en C - Utiliser la fonction personnalisée pour obtenir la sous-chaîne en C
Cet article présente plusieurs méthodes pour obtenir une sous-chaîne en C.
Utiliser la fonction strncpy
pour obtenir une sous-chaîne en C
strncpy
fait partie de la fonction de bibliothèque de chaînes de caractères C définie dans le fichier d’en-tête <string.h>
. Elle copie le nombre d’octets donné de la chaîne source vers la destination. strncpy
prend trois paramètres - destination char*
, pointeur de source, et l’entier pour indiquer le nombre d’octets à copier. Si le nombre d’octets spécifié est supérieur à celui que contient la chaîne source, des octets nuls supplémentaires sont alors stockés à la destination.
La fonction strncpy
renvoie le pointeur à la chaîne de destination ; ainsi, nous pouvons enchaîner l’appel dans l’instruction printf
pour imprimer directement la sous-chaîne. L’exemple suivant montre comment imprimer la première sous-chaîne de quatre caractères et ensuite la sous-chaîne de 10 caractères suivante.
#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);
}
Production :
This
string lit
Utiliser la fonction personnalisée pour obtenir la sous-chaîne en C
Nous pouvons aussi définir un wrapper de fonction personnalisé pour strncpy
et spécifier une nouvelle interface de quatre paramètres. À savoir, la fonction getSubstring
prendra les chaînes de destination et de source plus deux entiers spécifiant les positions de début et de fin des caractères nécessaires comme sous-chaîne. Notez que ce prototype de fonction n’implémente pas de vérification d’erreur supplémentaire, mais il renvoie directement le pointeur char*
transmis par l’appel strncpy
.
Comme dans l’exemple précédent, getSubstring
peut aussi être enchaîné à la fonction printf
en tant qu’argument. Une mise en garde concernant la fonction strncpy
est que les chaînes source et destination ne doivent pas se chevaucher dans la mémoire. De plus, le pointeur de destination doit pointer vers un tampon suffisamment grand pour stocker la chaîne source.
#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);
}
Production :
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