J'ai quatre Voici le code: p> char * code> macros que je veux mettre ensemble, mais je n'ai vu que des réponses avec deux
char * code>, y a-t-il un moyen de le faire?
3 Réponses :
Dans votre fonction Mise en œuvre, par exemple, le deuxième appel de Strcpy (chat, S1 );
Strcpy (chat, s2); p> Je pense que vous voulez dire que vous voulez dire la suivante p> une approche plus efficace est la suivante p> comme pour ces macros p> puis les premières et les troisièmes macros contiennent des zéros de terminaison. Si vous souhaitez les copier dans la chaîne de destination, vous devez vous rendre à la fonction standard Cependant, il y aura un problème que la chaîne contient des caractères zéro incorporés. Donc, peut-être qu'il n'y ait aucun sens d'ajouter la chaîne de résultat avec la terminaison zéro. P> p> Strcpy code> écrase la première chaîne de la matrice pointée par la variable
chat code>.
memcpy code> au lieu de
Strcpy code>. Dans ce cas, la fonction peut ressembler à p>
Peut-être const char * s1 code> ->
const char * const s1 code> serait mieux? Idem pour les autres
Ne pas travailler pour les données présentées. (Il contient des caractères nul)
Comme @ikegami remarqua aucune de nos solutions ne fonctionnera que des littéraux à chaîne contiennent des zéros.
@ikegami Standard C String Fonctions Ne vérifiez pas si un pointeur transmis est égal à NULL. Il incombe au client de la fonction de garantir que les pointeurs passés ne sont pas égaux à NULL.
Je n'ai pas dit null code>, j'ai dit caractère nul (
u + 0000, '\ 0' code>).
SHLEN code> et d'autres fonctions de chaîne ne vont pas fonctionner.
@Vladfrommoscow Tous les littéraux de chaînes sont automatiquement résiliés. Le premier et le troisième contiennent deux zéros.
@Holyblackcat Oui, mais il semble qu'il veuille copier seulement quatre caractères des macros.
depuis un code>,
deux code>,
trois code>,
quatre code> sont des macros en expansinant directement sur les constantes de chaîne, vous pouvez simplement Faites ceci:
char result[] = "\x0C\x03\xD1\x00" "\xC1\x03\x1A\x0C" "\xA2\x1A\x0D\x00" "\xD4\x1C\x4C\x0A";
Qu'en est-il de ce Char * One = "One"; Char * Two = "Deux"; Char * trois = "Trois"; Char * Quatre = "Quatre"; Code> sera-t-il le même bon? Vous mettez du désordre dans la tête débutante
@P__J__ La question dit explicitement "Macros". Mais j'ai édité la réponse pour dire clairement que cela ne fonctionne que sur les macros.
Sohere vous avez des macros #define One (const caractère []) {"asdfg"} #define deux (const caractère []) {"12345"} #define trois (const char []) {"@ # $% %% ^ "} #define quatre (const caractère []) {" zxcv "} code> Votre solution est-elle bonne?
@P__j____ oh bien, j'ai changé le libellé pour être encore plus précis. Je suis sûr que par " char * code> macros" i> op signifie "macros en expansion aux constantes de chaîne".
@P__J____: Char * one = "One"; Code> se développera à une erreur de syntaxe bizarre (erreur
: identifiant attendu ou '(' code>), qui enseignera la leçon À propos de Macros :) Voir GODBOLT.ORG/Z/PJUF5P
Compte tenu de la présence de caractères nul, ce ne sont pas des cordes (car celles-ci sont nulées), des fonctions de chaîne telles que Strlen code> ne peuvent pas être utilisées, de sorte que la taille des matrices serait doit être transmis à la fonction de concaténation.
size_t buf_size = sizeof(one two three four) - 1;
char *buf = malloc(buf_size);
memcpy(buf, one two three four, buf_size);
J'étais à Pittsburgh il y a une semaine et je n'ai pas encore ajusté pour Jetlag :)
Les définies sont des littéraux de chaînes. Ils sont de type
char [] code>. C'est-à-dire qu'ils sont des tableaux
char code>. Donc, vous pouvez les utiliser de la même manière que vous faites pour
char * code>.
Il y a quelques choses étranges sur votre code cependant. 1. Pourquoi faites-vous
Strcpy code> pour
s2 code>,
s3 code>? C'est inutile que chaque
Strcpy code> écrase précédemment
Strcpy code>. Peut-être que vous vouliez utiliser
strcat code> même pour ceux-ci. 2. Les cordes semblent contenir des valeurs binaires (non-ASCII). En fonction de ce que vous essayez de réaliser ce n'est probablement pas la bonne chose à faire. En particulier, il n'est pas sûr d'utiliser de telles "chaînes" avec les fonctions de chaîne.