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

Signaler
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

15 réponses

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

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

ou

sprintf(bufferAssezGrand, "%s%s", nom, "autre chaine");
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

bonsoir,

Ca ne vous étonne pas ceci :

char *nom;
nom="name";

Matt...
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Plus rien n'est étonnant sur un forum de programmation. Ils veulent
tous programmer sans avoir lu correctement le moindre tutoriel...
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
ou ta bouche .. ca suffira ^^
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
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.
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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...
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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...
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
3
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
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
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
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
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.