Je sais que je ne devrais pas utiliser cette fonction, et je m'en fous. La dernière fois que j'ai vérifié la spécification pour strcat, il a dit quelque chose dans le sens de la mise à jour de la première valeur et du retour de la même chose. Maintenant, c'est une question vraiment stupide, et je veux que vous l'expliquiez comme si vous parliez à une personne vraiment stupide.Je ne peux pas comprendre strcat
Pourquoi cela ne fonctionnera-t-il pas?
char* foo="foo";
printf(strcat(foo,"bar"));
EDIT: Je ne connais pas la différence entre char [] et char *. Comment allouer une chaîne de 255 caractères?
EDIT 2: OK, OK, alors char [nombre] alloue une chaîne de plusieurs octets? Logique. Merci.
EDIT 3: De même, comment utiliser un tableau de caractères sans le déclarer? Est-ce que je le classerais en tant que char [255]?
EDIT 4: strcat ((char [256]) "toto", "bar") renvoie une erreur. J'en ai marre de C.
EDIT 5: Tout comme strcat ((char [256]) "foo", (char []) "barre").
EDIT 5:
char[256] foo="bar";
réel lisse. "identificateur attendu"
Il n'y a rien de mal * avec 'strcat'. Ce n'est pas sûr.Heureusement, celui qui vous a dit de ne pas l'utiliser au moins a eu la courtoisie de mentionner 'strncat', le cousin sûr de la mémoire de' strcat', qui assure que le tampon ne déborde pas. –
Edit 3: vous ne pouvez pas. Vous utilisez soit un 'const char *' en lecture seule (inclut des littéraux de chaîne), soit vous déclarez une variable et l'allouez à l'avance, dynamiquement ('char * foo',' malloc', etc.) ou statiquement ('char foo [ 256] = "barre"; '). –
Édition 4: vous ne pouvez pas faire ce typecast. Vous devriez avoir une erreur à l'effet de "cast spécifie le type de tableau". '(char *)', cependant, est autorisé. Pas que ça fasse quoi que ce soit. Si vous avez typé la chaîne littérale "foo", peu importe ce que vous avez lancé, les données restent les mêmes, et elles sont toujours en lecture seule. –