Langage C structure

jéjéleboss Messages postés 1 Statut Membre -  
kilian Messages postés 8675 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))))
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. kilian Messages postés 8675 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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. kilian Messages postés 8675 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
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 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