web-dev-qa-db-fra.com

Étant donné un indice de début et de fin, comment puis-je copier une partie d'une chaîne en C?

En C, comment puis-je copier une chaîne avec des indices de début et de fin, afin que la chaîne ne soit que partiellement copiée (de l'index de début à l'index de fin)?

Ce serait comme "copie de chaîne C" strcpy, mais avec un index de début et de fin.

23
Josh Morrison

Avez-vous vérifié strncpy ?

char * strncpy (char * destination, const char * source, size_t num);

Vous devez comprendre que commence et fin définit en fait un num d'octets à être copié d'un endroit à un autre.

17
karlphillip

Utilisez strncpy

par exemple.

strncpy(dest, src + beginIndex, endIndex - beginIndex);

Cela suppose que vous avez

  1. Validé que dest est suffisamment grand.
  2. endIndex est supérieur à beginIndex
  3. beginIndex est inférieur à strlen(src)
  4. endIndex est inférieur à strlen(src)
54
Binary Worrier

Utilisez simplement memcpy .

Si la destination n'est pas assez grande, strncpy ne se terminera pas null. si la destination est énorme par rapport à la source, strncpy remplit simplement la destination avec des valeurs nulles après la chaîne. strncpy est inutile et ne convient pas pour copier des chaînes.

strncpy est comme memcpy sauf qu'il remplit la destination de nulls une fois qu'il en voit un dans la source. C'est absolument inutile pour les opérations de chaîne. C'est pour fixe avec 0 enregistrements rembourrés.

7
user1831086