J'ai deux cordes, str1 et str2. Je veux la concaténation d'eux sur un espace dans le tas. I Malloc espace pour eux en utilisant:
strcat(concat, str1); strcat(concat, str2);
3 Réponses :
Vous voulez faire un Strcpy, puis un strcat:
strcpy(concat, str1); strcat(concat, str2);
Je ferais personnellement les éléments suivants:
size_t length = strlen(str1) + strlen(str2) + 1;
char *concat = malloc(sizeof(char) * length);
if(concat == NULL)
{
// error
}
snprintf(concat, length, "%s%s", str1, str2);
+1 pour mentionner le chèque d'erreur. SNPRINTF () CODE> est souvent une bonne solution, même si elle borde-t-elle sur la surkill ici.
N'utilisez pas SHLEN code> pour calculer la longueur. Utilisez longueur = snaprintf (0,0, "% s% s", str1, str2); code> ou simplement utiliser asprintf code> (et assurez-vous d'inclure votre propre version - c'est Un wrapper trivial autour de snapintf code> - pour les systèmes qui n'incluent pas cette extension GNU).
Justification du commentaire de R sur lui-même ici (doit lire pour comprendre les conseils): Stackoverflow.com/a/5615561/340236
Qu'est-ce que Après cependant, je recommande d'utiliser ceci tire parti du fait que vous savez dès le début où vous voulez les octets des deux chaînes aller et combien il y a. p> p> strcat (Dest, src) code> est réellement la recherche d'un octet null commençant par Dest code> et sur l'avenir, puis écrivez le src Code> String là-bas. MALLOC code>, le contenu de la mémoire n'est pas défini, votre code actuel pourrait donc faire un certain nombre de choses, la plupart d'entre elles sont incorrectes. Si vous faites concat [0] = 0 code> avant le Strcat code> S, alors votre code fonctionne mais devra rechercher la longueur de str1 code> trois fois - une fois pour strlen code>, encore une fois pour le premier strcat code>, et dernier pour le second strcat code>. p> memcpy: code> p>
+1 Certainement un très bon moyen de le faire. J'utiliserais probablement memmove () code> plutôt que memcpy () code> car, bien que memcpy () code> soit sûr dans cette situation, ce n'est pas toujours Coffre-fort mais Memmove () code> est toujours sûr.
N'utilisez pas MemMove code> ici; c'est confu. Toute utilisation de MemMove code> devrait servir à documenter que vous faites quelque chose de très différent et inhabituel. Si je voyais MemMove code> Ici, je passerais une minute ou deux tentative de déterminer pourquoi le # * $ @ quelqu'un l'a utilisé et si quelque chose de paisible se déroulait ...