11
votes

C Concaténation de tableau de charcuterie C

Qu'est-ce que j'ai: xxx

donc je veux concaténer cmd en ajoutant une lettre de v . < p> évidemment: xxx

ne fonctionne pas car strcat n'accepte pas le paramètre V [n] " code> n = int .


0 commentaires

7 Réponses :


1
votes

Que diriez-vous de

strcat(cmd,&v[3]);


1 commentaires

Cela ajoutera plus d'un caractère et il ressemblera au-delà de la fin de la matrice à copier depuis qu'il n'y a pas de résiliation null.



2
votes

Tout d'abord, assurez-vous que la variable 'cmd' a suffisamment de mémoire allouée.

Deuxièmement, la mention sur 'V [3]' est la valeur qui est un octet signé. Vous devez utiliser l'appel suivant sur STRNCAT (pas STRACAT): P>

strncat(cmd,&v[3],1);


0 commentaires

9
votes

problèmes avec votre approche.

  • C strings doit se terminer dans 0 octet, en d'autres termes '\ 0' code> caractère. Utilisation de "" code> ajoute que vous devez l'ajouter automatiquement, mais sinon vous devez l'ajouter vous-même, et toutes les fonctions de chaîne dépendent de cette étant là. P> LI>

  • Votre tableau V contient des caractères, non des chaînes et strcat code> prend des chaînes. p> li> ul>

    une solution: p>

    snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
    


3 commentaires

Merci! Si je peux m'occuper que CMD [] contient suffisamment d'espace, lequel vous pensez est la méthode la plus rapide?


Strncat est probablement le plus rapide de ceux-ci, mais le plus rapide est int Len = SHLEN (CMD); cmd [len] = V [3]; cmd [len + 1] = 0; . Notez la manière dont l'indexation de tableau commence à partir de 0, donc Certains_cstring [Strlen (Certains_cstring)] est toujours 0.


Réponse approfondie inattendue - Merci d'avoir fourni de la valeur!



12
votes

hmm. Pour autant que je sois bien compris, vous souhaitez ajouter un seul caractère de la deuxième matrice? Vous devez donc utiliser xxx

: -)


1 commentaires

J'ai choisi une autre façon de le faire, mais cela fonctionne également, c'est très simple. Merci :)



1
votes

Le problème est que vous n'utilisez pas également STRACAT:

char *strcat (char *dest, char src);


0 commentaires

5
votes

faire pas Utilisez ceci: xxx

& v [3] n'est pas un pointeur à un pointeur NULL terminé une chaîne! Utilisez plutôt xxx


0 commentaires

1
votes
int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';

0 commentaires