Obtenez la sous-chaîne en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction strncpy pour obtenir une sous-chaîne en C
  2. Utiliser la fonction personnalisée pour obtenir la sous-chaîne en C
Obtenez 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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C String