[Labo C] Tableau de caractères

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Labo C] Tableau de caractères

Message  bigmax le Dim 20 Nov 2011, 13:33

Bonjour, en faisant l'intérro1 ATP de l'année dernière, je me suis posé une question sur comment est il préférable de remplir un tableau de caractères pour l'affichage

Code:
int main(void) {
   int i;
   char tab[15];
   char tab2[15];

   /*Methode 1*/

   tab[0] = 'a';
   tab[1] = 'b';
   tab[2] = 'c';
   tab[3] = '\0';
   printf("%s",tab);

   /*Methode 2*/

   for(i=0;i<15;i++){
      tab2[i]=0;
   }
   tab2[0] = 'd';
   tab2[1] = 'e';
   tab2[2] = 'f';

   printf(" %s",tab2);

   fflush(stdout);
   return EXIT_SUCCESS;
}

Vaut-il mieux utiliser la 1ere méthode ou la 2eme ?

Merci d'avance.

bigmax

Nombre de messages : 132
Age : 27
Prénom : Gilles
Statut : 3ème Réseaux
Date d'inscription : 17/11/2007

Revenir en haut Aller en bas

Re: [Labo C] Tableau de caractères

Message  nvs le Dim 20 Nov 2011, 14:09

aucune des deux !

pour une chaîne vide :
Code:
char str[15] = "";

pour une chaîne non vide :
Code:
#include <string.h>
...
char str[15];
strncpy(str, "brol...etc.", 14); /* le 14 est laid, car le 15 l'était déjà ! */
str[sizeof str - 1] = '\0'; /* bien mieux que 14 */






Suspect

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [Labo C] Tableau de caractères

Message  bigmax le Dim 20 Nov 2011, 16:57

c'est effectivement plus simple de mettre un \0 à l'endroit qui va bien dans le tableau..
Je me doute que la méthode 1 de mon exemple n'est surement pas le moyen pour initialiser une chaîne mais c'était pour le concept de l'interro de récupérer dans une zone mémoire caractères par caractères pour les placer dans un char[15]

Code:
typedef struct joueur {
   char nom[15]; /* chaîne (il n'y a pas deux noms identiques parmi les meilleurs joueurs) */
   char prenom [15]; /* chaîne (prénom du joueur) */
   short points; /* points obtenus pendant l'année */
   int taille; /* taille du joueur en cm */
   char nationalite[4]; /* chaîne contenant toujours 3 lettres */
   Date dateNais; /* Date est une structure donnée dans le premier TD */
} Joueur;

maintenant en testant un peu votre exemple, je ne comprend pas pourquoi je peux faire :

Code:
char str[15] = "";
   str[0] = 'a';
   printf("%s",str);
qui m'affiche juste 'a' et je suis content car il ne m'affiche rien de plus.

Code:
   Joueur * j = malloc(sizeof(Joueur));
   j->nom = "";
Je suis surement fatigué mais ici je ne comprends pas pourquoi le compilateur râle
error: incompatible types when assigning to type 'char[15]' from type 'char *'

bigmax

Nombre de messages : 132
Age : 27
Prénom : Gilles
Statut : 3ème Réseaux
Date d'inscription : 17/11/2007

Revenir en haut Aller en bas

Re: [Labo C] Tableau de caractères

Message  nvs le Dim 20 Nov 2011, 18:04

bigmax a écrit:[...] je ne comprend pas pourquoi je peux faire :

Code:
char str[15] = "";
   str[0] = 'a';
   printf("%s",str);
qui m'affiche juste 'a' et je suis content car il ne m'affiche rien de plus.
quand on n'initialise pas tous les éléments d'un tableau, les éléments restants sont mis à 0. ici
Code:
char str[15] = "";
initialise explicitement str[0] à '\0' (c.-à-d. 0). le compilateur initialise implicitement str[1] à str[14] à 0 (c.-à-d. '\0') Smile

bigmax a écrit:
Code:
   Joueur * j = malloc(sizeof(Joueur));
   j->nom = "";
Je suis surement fatigué mais ici je ne comprends pas pourquoi le compilateur râle
error: incompatible types when assigning to type 'char[15]' from type 'char *'
dans ta structure, nom est un tableau. un tableau est un pointeur constant vers son premier élément.








pirat

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [Labo C] Tableau de caractères

Message  bigmax le Dim 20 Nov 2011, 20:44

dans ta structure, nom est un tableau. un tableau est un pointeur constant vers son premier élément.
Je viens de tilter avec l'exemple suivant..

Code:
char str[15] = "";
est OK

Code:
char str[15];
str = "";
KO

Le 2eme exemple est ce qui se produit avec ma structure.

Merci beaucoup pour vos explications ça m'a bien aidé à comprendre Smile

bigmax

Nombre de messages : 132
Age : 27
Prénom : Gilles
Statut : 3ème Réseaux
Date d'inscription : 17/11/2007

Revenir en haut Aller en bas

Re: [Labo C] Tableau de caractères

Message  Contenu sponsorisé Aujourd'hui à 20:39


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum