Ottieni sottostringa in C

Jinku Hu 12 ottobre 2023
  1. Usa la funzione strncpy per ottenere sottostringa in C
  2. Usa la funzione personalizzata per ottenere la sottostringa in C
Ottieni sottostringa in C

Questo articolo introdurrà più metodi su come ottenere la sottostringa in C.

Usa la funzione strncpy per ottenere sottostringa in C

strncpy fa parte della funzione della libreria di stringhe C definita nel file di intestazione <string.h>. Copia il numero di byte specificato dalla stringa di origine alla destinazione. strncpy accetta tre parametri: destinazione char*, puntatore sorgente e intero per indicare il numero di byte da copiare. Se il numero di byte specificato è maggiore di quello contenuto nella stringa di origine, nella destinazione vengono memorizzati ulteriori byte nulli.

La funzione strncpy restituisce il puntatore alla stringa di destinazione; quindi, possiamo concatenare la chiamata nell’istruzione printf per stampare direttamente la sottostringa. L’esempio seguente mostra come stampare la prima sottostringa di quattro caratteri e quindi la successiva sottostringa di 10 caratteri.

#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);
}

Produzione:

This
string lit

Usa la funzione personalizzata per ottenere la sottostringa in C

In alternativa, possiamo definire un wrapper di funzione personalizzato per strncpy e specificare una nuova interfaccia di quattro parametri. Vale a dire, la funzione getSubstring prenderà le stringhe di destinazione e di origine più due interi che specificano le posizioni iniziale e finale dei caratteri necessari come sottostringa. Si noti che questo prototipo di funzione non implementa un controllo aggiuntivo degli errori, ma restituisce direttamente il puntatore char* passato dalla chiamata strncpy.

Simile all’esempio precedente, getSubstring può anche essere concatenato nella funzione printf come argomento. Un avvertimento riguardo allo strncpy è che le stringhe di destinazione e di origine non devono sovrapporsi nella memoria. Inoltre, il puntatore di destinazione dovrebbe puntare a un buffer sufficientemente grande per memorizzare la stringa di origine.

#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);
}

Produzione:

This
string lit
Autore: 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

Articolo correlato - C String