Concatena String e Int in C
-
Usa le funzioni
asprintf
,strcat
estrcpy
per concatenare String e Int in C -
Usa le funzioni
asprintf
ememccpy
per concatenare String e Int in C
Questo articolo mostrerà più metodi per concatenare string
e int
in C.
Usa le funzioni asprintf
, strcat
e strcpy
per concatenare String e Int in C
Il primo passo per concatenare la variabile int
e la stringa di caratteri è convertire un intero in stringa. Utilizziamo la funzione asprintf
per memorizzare il numero intero passato come stringa di caratteri. asprintf
fa parte dell’estensione della libreria GNU C e potrebbe non essere disponibile in altre implementazioni. Funziona in modo simile a sprintf
tranne per il fatto che il buffer della stringa di caratteri di destinazione viene allocato dinamicamente utilizzando internamente la chiamata alla funzione malloc
e il puntatore restituito dovrebbe essere liberato prima dell’uscita del programma. Una volta convertito il numero intero, concateniamo le chiamate strcpy
e strcat
per concatenare due date stringhe di caratteri nel buffer che l’utente alloca. In questo caso, abbiamo definito arbitrariamente la macro MAX
per indicare la dimensione del buffer di destinazione, ma in scenari reali sarebbe più flessibile usare malloc
.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
strcat(strcpy(buffer, str1), num);
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Produzione:
hello there1234
In alternativa, le chiamate concatenate possono essere seguite da un’altra invocazione della funzione strcat
e aggiungere altre stringhe al buffer char
dato. Notare che controlliamo la funzione asprintf
per il valore restituito con successo e, se fallisce, continuiamo con il processo di concatenazione.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
strcat(strcpy(buffer, "Hello there, "), num);
strcat(buffer, "! continued");
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Produzione:
Hello there, 1234! continued
Usa le funzioni asprintf
e memccpy
per concatenare String e Int in C
In alternativa, asprintf
può essere usato insieme a memccpy
per concatenare la stringa di caratteri e int
. memccpy
fa parte delle utilità per le stringhe della libreria standard C definite nel file di intestazione <string.h>
. Ci vogliono due puntatori che denotano i buffer di origine e di destinazione. Notare che queste aree di memoria buffer non dovrebbero sovrapporsi; in caso contrario, i risultati non sono definiti. Gli ultimi due argomenti rappresentano il carattere in corrispondenza del quale interrompere la copia e il numero massimo di byte da prelevare dalla posizione di origine. Chiamiamo la funzione free
nell’ambito else
poiché altrimenti, non possiamo essere sicuri che il puntatore num
sia il puntatore valido.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
memccpy(memccpy(buffer, str1, '\0', MAX) - 1, num, '\0', MAX);
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Produzione:
hello there1234
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