La maggior parte dei programmatori C conosce la funzione strdup
. Molti di loro lo danno per scontato, ma non fa parte dello standard C (né C89, C99 né C11). Fa parte di POSIX e potrebbe non essere disponibile su tutti gli ambienti. Infatti, Microsoft ha insistito per rinominarlo _strdup
, aggiungendo alla confusione.Qual è la logica per non includere strdup nello standard C?
è piuttosto facile da definire in questo modo (in C):
#include <string.h>
char *strdup(const char *s) {
size_t size = strlen(s) + 1;
char *p = malloc(size);
if (p) {
memcpy(p, s, size);
}
return p;
}
Ma anche i programmatori esperti può facilmente sbagliare.
Inoltre, ridefinendo la funzione solo su sistemi che non dispongono si dimostra un po 'complicato come spiegato qui: strdup() function
Perché non includere tali utili funzioni ampiamente supportate nelle edizioni rivedute del Gruppo C Standard? Sono state aggiunte molte nuove funzioni nella libreria C standard in C99, qual è la motivazione per non includere strdup
?
@AlterMann: 'malloc' e gli amici sono sempre stati parte dello standard C. 'aligned_alloc' è stato aggiunto in C11,' malloc' è menzionato su 11 pagine nello standard C11, puoi spiegare cosa intendi? – chqrlie
[Perché malloc() è dannoso nei sistemi embedded?] (Https://www.quora.com/Why-is-malloc-harmful-in-embedded-systems) –
Penso che sia OffTopic per StackOverflow ... – LPs