Bonjour à tous,
voila j'ai besoin de concatené un certain nombre de char * j'ai vu strcat mais il y a quelque souci enfin si quelqu'un a de l'info la dessus je suis preneur
jeremy
Bonjour à tous,
voila j'ai besoin de concatené un certain nombre de char * j'ai vu strcat mais il y a quelque souci enfin si quelqu'un a de l'info la dessus je suis preneur
jeremy
Rien ne se perd, rien ne se crée, tout se transforme
------- -------
Il n'y a aucun souci avec strcat, il suffit de savoir, comme toujours en C, ce que l'on fait : pour strcat il faut que le tableau de caractères recevant soit assez long pour pouvoir contenir l'ancienne chaîne plus la nouvelle chaîne concaténée.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Salut,
A quel style de soucis penses-tu concernant l'utilisation de strcat. Il faut juste faire attention à ce que la chaîne cible ait l'espace suffisant pour contenir les 2 chaînes concaténées et pour contenir le caractère '\0' en fin de chaîne.
Un petit exemple:
Le seul soucis et que le tableau de caractère cible doit contenir un minimum de 13 cases pour accueillir "Hello world!"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <string.h> #include <stdio.h> #include <stdlib.h> int main(void) { char cible[20] = "Hello"; strcat(cible, " world!"); puts(cible); /* affiche "Hello world!"*/ return EXIT_SUCCESS; }
Meilleures salutations
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
si tu as strncat... ça regle le probleme de taille de ton tableau ...
sinon tu peux recoder strncat !
Envoyé par man strncat
click my www
............|___
...................\
.................._|_
..................\ /
..................."
Envoyé par Dark_Ebola
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Quels sont tes soucis ? Si tu nous le dit pas on peut pas deviner ... enfin moi j'ai oublié de regarder au fond de ma tasse de théEnvoyé par jerem2000
Si c'est un problème de taille pour l'adresse cible, moi ce que je conseil, c'est d'allouer un espace pour la chaine cible de taille equivalente à toutes les chaînes à concaténer ensembles + 1 pour le zéro de fin.
Si tu ne connais pas le nombre de chaînes en avance, vive realloc (au lieu de malloc) !
Enfin voilà, dit nous en un peu plus et montre nous ton code !
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
oui voila le problem la taille et complètement variable
Rien ne se perd, rien ne se crée, tout se transforme
------- -------
Bin montre ton code ... ca va pas se faire tout seul non plus.Envoyé par jerem2000
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
ok je te fait un exemple qui va reprendre juste ce dont j'ai besoin
voila et ca ca me pose problème! car ce sont des char*
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int main(int argc, char *argv[]) { //initialisation des variables char * end, user, pass; char * dest=""; //récupération des paramètres user=strtol(argv[1], &end, 0); pass=strtol(argv[2], &end, 0); //je concatène les chaines user, et pass strcat(dest,user); strcat(dest,pass); }
Rien ne se perd, rien ne se crée, tout se transforme
------- -------
Il y a un problème, là: user et pass ne sont pas des chaînes, mais des char (un type entier, donc) qui reçoivent la valeur de retour de strtol() (de type long, un type entier également) qui ne sont pas directement concaténables à des chaînes...
La seule fonction standard disponible partout pour cela, c'est sprintf(). Attention, il faut être sûr de donner un buffer assez grand. Généralement, considérer 20 caractères max pour un entier est une taille raisonnable...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
salut
Code : Sélectionner tout - Visualiser dans une fenêtre à part long int strtol (const char *nptr, char **endptr, int base);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char *dest = ""; // euh... c'est quoi le but là ?
Ouais bon je vais pas chercher plus loin que ca, si tu n'alloue pas l'espace pointé par dest tu risques jamais de y arriver ! Tu dois allouer de l'espace suivant ce que vont prendre comme place les autres chaînes.
Bon voilà pour le code remanié. Maintenant passons à un truc qui m'a grandement choqué ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <stdlib.h> #include <stdio.h> #include <string.h> int main (int argc, char ** argv) { char * dest = NULL; /* Test des arguments. */ if (argc > 1) { /* Allocation d'un espace pour la chaîne */ dest = malloc (strlen (argv[1]) + strlen (argv[2]) + 2); if (dest != NULL) { /* je concatène les chaines user, et pass */ strcpy (dest, argv[1]); strcat (dest, ";"); strcat (dest, argv[1]); printf ("Nom et pass : %s\n", dest); /* Liberation de la memoire allouee. */ free (dest); dest = NULL; } else { fprintf (stderr, "Erreur pendant l'allocation de \"dest\" !\n"); exit (EXIT_FAILURE); } } else { fprintf (stderr, "Arguments manquants !\n"); } return EXIT_SUCCESS; }
Tu crois qu'avec strtol tu vas récupérer des arguments, du moins correctement ? Tu as lu ce que fait cette fonction ? Lit bien: strtol elle convertie une chaîne en entier long
Toi tu veux une chaîne et rien d'autre alors je vois franchement pas ce que tu as essayé de faire là.
Juste un petit commentaire de fin sur ce que j'ai fait pour la concaténation. J'ai commencé par un strcpy car en fait, une fois la memoire allouée, elle n'est pas initialisée, elle contient donc des données indéfinies, donc pour éviter les ennuis du genre, des caractères inatendus, bin il faut correctement remplir le début soit par strcpy.
Une autre solution pour éviter ce problème serait de faire un memset sur l'espace fraîchement alloué puis là tu peux commencer directement par un strcat !
Voilà, si tu as des questions hésite pas
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager