Comment faire pour que (char *)nom2 soit égal à (char *)nom + "mon texte" ? [En

Résolu
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 19 oct. 2006 à 18:31
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 20 oct. 2006 à 18:21
Salut,





Je voudrais savoir comment faire pour que (char *)nom2 soit égal à (char *)nom + "mon texte" ? [En API WIN32 en C] :

char *nom;
nom="name";

char *nom2;

Comment faire pour que : nom2 = nom + "autre_texte";

Merci d'avance !

A+

Nico
A voir également:

15 réponses

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
19 oct. 2006 à 18:59
Salut, essayes de regarder strcpy et strncat...
http://www.cplusplus.com/ref/cstring/strcpy.html
..
Louis
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 oct. 2006 à 20:13
char* bufferAssezGrand[512];

strcpy(bufferAssezGrand, nom);
strcat(bufferassezGrand, "autre chaine");

ou

sprintf(bufferAssezGrand, "%s%s", nom, "autre chaine");
3
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
19 oct. 2006 à 23:03
bonsoir,

Ca ne vous étonne pas ceci :

char *nom;
nom="name";

Matt...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 oct. 2006 à 23:05
Plus rien n'est étonnant sur un forum de programmation. Ils veulent
tous programmer sans avoir lu correctement le moindre tutoriel...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
19 oct. 2006 à 23:10
Euh s'il vous plait
char *nom;
nom="name";
est tout a fait correct, en effet "name" est un pointeur de type * sur une adresse memoire , luthor ..  que dire. ..  tourne 7 fois tes doigts dans ta bouches??
Louis
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
19 oct. 2006 à 23:11
ou ta bouche .. ca suffira ^^
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 oct. 2006 à 23:11
c'est pas en tutorielisant qu'on apprend mais en testant.
moi les tutos je les oublis tout de suite. après les avoir lu.
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
19 oct. 2006 à 23:21
re-bonsoir,

ca n'est pas que ça compile et quand plus (par chance) ça marche, que c'est correct...

char *nom; // pointeur de type char sur une adresse memoire, ok. Mais ou ? personne ne le sait.
nom = "name"; // ici, on met 'name' quelque part, ca marche, ca marche pas, on verra à l'execution.

bien sur c'est juste, pourquoi on se fait ch... avec les mallocs, hein ?

Matt...
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
19 oct. 2006 à 23:26
Ralala ...

"name" est ici une constante  de type char* .. et elle peut rentrer dans un char * tu crois que le compilo te rajoute un strcpy? nan nan .. il est pas assez gentil ..
juste test ceci :
char nom[10];
nom = "name";
la le compilo a un probleme..
( je remarque que luthor avait raison en fait.. ( excuse moi ^^) , il y a en effet des tas de gens qui ne connaissent pas tous seulement ils sont persuadés d'avoir raison ... )
Louis
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 oct. 2006 à 23:35
C'est pas seulement en testant qu'on apprend. On apprend des conneries,
oui ... Les vrais infos fiables viennent de la documentation, pas des
petits essais perso. C'est pas parce que ton code compile qu'il est
correct, loin de la...


char * test;

test = "chaine"; <= c'est totalement délirant.


alors que ca:

char * test = "chaine"; <= c'est correct bien que c'est très confu
comme écriture, mais bon le compilo l'accepte et c'est parfois pratique.


C'est équivalent à : char test[7] = "chaine"; <= la au moins, on
demande 7 octet en mémoire et "test" pointe sur le premier octet.


(char*) c'est quoi pour toi ? Pour moi c'est 4 misérables octet qui contiennt l'adresse d'un truc.
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
19 oct. 2006 à 23:51
tiens, je viens de voir que moi aussi, je raconte aussi des conneries.

ici aussi mon compilo à un probleme.

char nom[5];
nom = "name";

normal, il faut utiliser la syntaxe suivante :
strcpy(nom, "name");

Matt...
0
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
20 oct. 2006 à 17:37
Salut,







Merci pour vos réponses!

Je me suis servi de celles de 298266 rrk275 et ça a marché!
A propos : elles sont très proches de celles de =195004 yann_lo_san.

A+


Nico
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
20 oct. 2006 à 18:01
luthor ce serait appreciable que tu sois un peu moins entêté .. 
 char * test;
test = "chaine";
n'est pas délirant; ...
pour te le prouver :
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *adr;
    adr = "une chaine";
    printf("%d\n",adr);
    adr = "une autre chaine";
    printf("%d\n",adr);
    return 0;
}




affiche un nombre different a chaque printf ..
car on pointe vers une chaine differente stockée dans la memoire..
( un peu comme le serait db 'ma chaine$'  en asm . )
et dans ce programme :
#include <stdio.h>
#include <stdlib.h>




int main()
{
    char *adr = "lol";
    char bis[] = "lol";
    adr[0] = 'p';
    bis[0] = 'p';
    return 0;
}
adr[0]  est inaccesible en lecture (car type pointeur de chaine ) tandis que bis[0] oui ..  (car tableau de taille strlen(bis) .. )
Ce ne sont pas des tests je sais vraiment ce que je raconte .. ( si apres tu t'obstine .. on ne peut plus rien pour toi.. )
louis
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
20 oct. 2006 à 18:13
Enfin le mieux est quant même de redefinir une classe Chaine, puis surcharger l'operateur + pour en faire une concaténation.
C'est le plus efficace.

class chaine
{
friend chaine operator + (const chaine&, const chaine&);

// Tous le reste

private:
   unsigned len;
   char* buf;
}

Puis on utilise ça comme un CString ou std::string
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
20 oct. 2006 à 18:21
En fait tu te serts d'un pointeur constant sur char pour créer une chaine constante mais tu doit allouer avec malloc si la chaine est dynamique.
0
Rejoignez-nous