Langage C structure

jéjéleboss Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
-----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