J'ai commencé à apprendre le C hier, donc cela peut être une question triviale, mais je ne comprends toujours pas.segfault lors de la concaténation de deux chaînes dans un petit tableau
Disons que j'ai le code suivant:
#include <stdio.h>
#include <string.h>
int main()
{
char text[8];
strcpy(text, "Lorem ");
puts(text);
strcat(text, "ipsum!");
puts(text);
return 0;
}
Cela se traduira par une erreur de segmentation quand (ou après) concating les cordes. Cependant, si je change la taille de text
de 8 à 9, ce n'est pas le cas.
S'il vous plaît me corriger si je me trompe, mais ce que je pensais être juste: - "! Ipsum"
"Lorem" taille 6 (ou 7 avec \ 0)
- taille 6 (ou 7 avec \ 0)
"Lorem ipsum!" - taille 12 (ou 13 avec \ 0)
Alors, d'où vient le 8/9? Est-ce causé par la mise en œuvre de strcat
? Ou y a-t-il quelque chose comme une longueur de tableau minimale? Ou est-ce que je fais une erreur de débutant stupide?
Merci d'avance.
[comportement non défini] (http://en.wikipedia.org/wiki/Undefined_behavior) –
Exécuter ce sous Valgrind (http://valgrind.org) et vous verrez qu'il ya un problème à la fois cas. – alk
Et la réponse à votre question, "d'où vient le 8/9", il est tout à fait possible que votre compilateur particulier alloue de la mémoire en morceaux de 8 octets. Donc, le texte [8] attribuerait 8 octets; le texte [9] arrondirait jusqu'à 16 octets. Bien sûr, cela dépend de l'implémentation, et vous ne devriez jamais compter sur un compilateur qui le fait toujours! –