malloc(u);
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct foo {
int garbage[42];
char *name;
};
int
main(int argc, char *argv[])
{
struct foo *f;
size_t s;
if (argc < 2)
return (EXIT_FAILURE);
s = (strlen(argv[1]) + 1) * sizeof(char);
f = malloc(sizeof(struct foo) + s);
if (f == NULL)
return (EXIT_FAILURE);
f->name = &f[1];
strlcpy(f->name, argv[1], s);
(void)printf("What you say?\n%s\n", f->name);
free(f);
return (EXIT_SUCCESS);
}
Amusant comme erreur, ça existe dans le monde réel ?
Un compilateur digne de ce nom devrait gueuler, mais il paraît que la plupart des gens ne regardent pas les warnings.
Et accessoirement, le Standard garantit que sizeof(char) vaut 1, mais je peux comprendre qu’on veuille garder la multiplication par 1 dans la taille. Je peux comprendre aussi qu’on utilise NULL plutôt que 0, même si je ne pense pas que ce soit une bonne chose. Et strlcpy n’est pas standard, donc pas portable.
corrigé l’horrible
f->name = f + sizeof(struct foo);enf->name = &f[1], merci :)