432 votes

Concaténation de chaînes C

Je travaille en C et j’ai concaténer les quelques petites choses.

En ce moment j’ai ceci :

Maintenant si vous avez une expérience en C je suis sûr que vous vous rendez compte que cela vous donne une erreur de Segmentation lorsque vous essayez de l’exécuter. Alors, comment puis-je travailler autour de cela ?

490voto

Brian R. Bondy Points 141769

En C, les chaînes sont juste des tableaux de char. Si vous ne pouvez pas ajouter directement.

Voici un exemple de cplusplus.com:

char str[80];
strcpy (str,"these ");
strcat (str,"strings ");
strcat (str,"are ");
strcat (str,"concatenated.");

Donc dans votre exemple, vous souhaitez:

char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy (str, "TEXT ");
strcat (str, foo);
strcat (str, bar);

La valeur de retour de strcat peuvent être ignorés, il renvoie le pointeur de même qu'a été adoptée dans le premier argument. Vous n'avez pas besoin de cette valeur. La valeur de retour est tout simplement pour des raisons de commodité, il vous permet de chaîner les appels en une seule ligne de code.

Pour le premier paramètre, vous devez avoir le tampon de destination lui-même. Le tampon de destination doit être un char tableau tampon. Exemple char buffer[1024];

Soyez très prudent que le premier paramètre a assez d'espace pour ce que vous essayez de le copier dans. S'il est disponible pour vous, il est plus sûr d'utiliser des fonctions comme: strcpy_s et strcat_s explicitement spécifier la taille de la mémoire tampon de destination.

Vous ne pouvez jamais utiliser un littéral de chaîne comme un tampon, vous devez toujours utiliser votre propre tampon.

301voto

Alex B Points 34304

Évitez d’utiliser des `` dans le code C. Le plus propre et, surtout, la manière la plus sûre consiste à utiliser `` :

Certains intervenants ont soulevé un problème que le nombre d’arguments peut-être ne pas correspondre à la chaîne de format et le code se compile toujours, mais la plupart des compilateurs déjà émettre un avertissement si c’est le cas.

32voto

Mr.Ree Points 5112

Gens, utilisez strncpy(), strncat() ou printf()ns.
Supérieure à votre espace de mémoire tampon sera poubelle tout ce qui suit dans la mémoire !
(Et n’oubliez pas de laisser un espace pour le caractère de fin null « \0 » !)

16voto

Reed Hedges Points 995

Malloc et realloc sont également utiles si vous ne savez pas avance combien de chaînes est être concaténées.

3voto

Pieter Points 9200

Le premier argument de strcat() doit être en mesure de conserver suffisamment d'espace pour la chaîne concaténée. Donc allouer un tampon avec suffisamment d'espace pour recevoir le résultat.

char bigEnough[64] = "";

strcat(bigEnough, "TEXT");
strcat(bigEnough, foo);

/* and so on */

strcat() permet de concaténer le deuxième argument avec le premier argument, et stocker le résultat dans le premier argument, le retour char* est, tout simplement, ce premier argument, et uniquement pour votre commodité.

Vous n'obtenez pas une nouvelle chaîne alloué par la première et la deuxième argument concaténés, je suppose que vous prévu sur la base de votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X