Langage C structure

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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.
    1. Modérateur
      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
      1. Modérateur
        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.
        1. Modérateur
          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");
          

          1. Modérateur
            -----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 :-)