HELP envoi chaine dans structure par fnction

Fermé
saliman - 22 nov. 2007 à 02:28
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 23 nov. 2007 à 08:24
Bonsoir, jai quelque difficulté a faire fonctionner ce prgm; si quelquun pouvait maider ce serait sympa ... merci :)


typedef struct mem{
char *nume[];
}t_mem;


void signif(char *n, t_mem tab[])
{
*tab[0].nume = n;
//bien sur ya dautre truc dans la fonction, mais ici c ca qui marche po
}



int main(void)
{
char num[]="1860469T45";

t_mem s[1];

signif(num,s);

printf("%s\n",*s[0].nume); //ici je voudrais que sa maffiche : 1860469T45

system("pause");
return 0;
}
A voir également:

3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
22 nov. 2007 à 09:47
houlà ! J'ai l'impression que tu as du mal avec la notion de pointeur et de tableau.
je suis même un peu étonner que la première igne du main fonctionne.
essai :
 char num[sizeof("1860469T45")];
strcpy(num,"1860469T45");

Je sais pas si çarésoudra ton problème, mais ça sera plus propre.
0
oui c pas faux jai un peu de mal, mais jessai de comprendre :)

merci pour ton aide je vais essayer et je te tien o courant si ca marche ou pas
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
23 nov. 2007 à 08:24
Mamiemando avait fait un jolie message sur les pointeurs/tableau, mais le temps de le retrouver...
Je te fait un petit rappel alors.
Pointeur et tableau,c 'est EXACTEMENT la même chose !
l'intéret de la notation en crochet [ ] est de ne pas avoir à faire l'allocation mémoire soit meme.
donc, faire : double* a;a=new double[5];
ou : double b[5];
aura le même résultat, a et b seront deux tableaux de doubles ET deux pointeur.
Maintenant, là où est la confusion, c'est lorsque tu veux recopier un tableau dans une autre variable. Vers a=b; donnera apparemment un résultat satisfesant dans un premier temps, mais n'est pas exactement ce que tu voulais faire.
En effet, quand tu fait a=b, affecte la valeur du pointeur b à a. a devient alors une espèce d'alias de b. si tu modifie a[2] tu modifie identiquement b[2] et inversement.
Et ce qui est valable pour les double l'est aussi pour les int ou les char !
Une chaine de caractère entre guillements, par exemple "chaine", est de type 'const char*' (ou const char[]) et faire char *num="chaine"; fait pointé num vers le const char*.

Dans le cas des char, il existe des fonctions C standard de copie et de comparaison: strcpy() strcmp()

Dernière remarque qui pourrai t'être utiile, c'est la façon d'accéder aux éléments d'un tableau. Pour accéder à une valeur d'un pointeur, on peut faire : *a ou a[0], ce qui est équivalent.
Ceci peut être élargie, *(a+i) est équivalent à a[i].

Tout ça pour te dire que tableau et pointeur c'est pareil. Et qu'il faut faire attention que lorsque tu met une équalité entre deux pointeurs, il faut être sur de ce que tu fait, que tu ne cherche pas à recopier un tableau dans l'autre.
Dernière remarque, fait attention à l'allocation mémoire et au dépassement de tableau qui peuvent créer des erreurs et conduire au plantage du prog
0