Langage C structure

Fermé
jéjéleboss Messages postés 1 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 2 juillet 2007 - 2 juil. 2007 à 16:38
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 2 juil. 2007 à 22:59
bonjour j'ai exercice en programmation que je n'arrive pas à resoudre le voici

Soit une structure défini de la façon suivante:

struct st
{
int*a;
char*chaine;
}s,*ps;

int b[]={1,2,3,4,5,};
s.a = b ;
s.chaine ="ceci est une chaine";
ps=*s;

Question: Quelles sont les valeurs des expressions suivantes après execution du code précédent:
a)*(s.chaine+3)
b)ps->chaine[s.a[3]]
c)ps->(*chaine+ps->(*(a+2))))
A voir également:

5 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 juil. 2007 à 16:58
Il ya une ligne fausse dans l'énoncé:
ps=*s;
à remplacer par
ps=&s;

ps est un pointeur vers une structure st. Il doit donc avoir comme valeur l'adresse d'une structure st.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 juil. 2007 à 19:53
Salut,

s.chaine ="ceci est une chaine";

tu dois faire un strcpy
on ne peux pas utiliser "=" pour les chaînes de caractères

en plus il faut allouer un peu de mémoire
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 juil. 2007 à 20:24
Si tu peux.
En fait quand tu fais ça:
char *str = "une chaine";

Il s'agira d'une chaine constante stockée dans une zone mémoire accessible en lecture seule au lancement du programme. Cette zone mémoire initialisée avec ces caractères est allouée par le système d'exploitation au lancement du programme donc ya pas de soucis, str ne fera que pointer vers cette zone.

Ce que tu ne peux pas faire c'est:
char *str;
strcpy(str, "ma chaine");

Car là ça signifie que tu copies le contenu de "ma chaine" dans la zone mémoire pointée par str. Or ici str ne pointe sur rien.

En fait une expression comprise entre guillemets doubles représente un pointeur vers un tableau de caractère. La zone mémoire pointée est en lecture seule donc constante.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 juil. 2007 à 20:30
Salut,

je suis toute à fait d'accord avec toi

En revanche dans son cas il ne s'agit pas d'une initialisation donc il ne peux pas faire s.chaine = "jlksdf lkjsdflk "
et quand j'ai parlé de strcpy j'ai bien précisé qu'il faut allouer de la mémoire

en bref je voulais dire
char *str;
str = (char *) malloc ( sizeof (char) * 50);
strcpy(str, "jkljk ljklj");

0

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

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 juil. 2007 à 22:59
-----En revanche dans son cas il ne s'agit pas d'une initialisation donc il ne peux pas faire s.chaine = "jlksdf lkjsdflk " ------

Si si, tu peux le faire après avoir déclaré la variable :-)
0