Ottieni sottostringa in C
-
Usa la funzione
strncpy
per ottenere sottostringa in C - Usa la funzione personalizzata per ottenere la 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
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