Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

chaine de caractères en C


iph

Messages recommandés

Salut tlm,

 

il y a quelques trucs que je ne piges pas et vu que je n'ai pas trouver les réponses à mes questions j'me tourne vers vous :P

 

Pourquoi est ce que l'on a la valeur ascii et pas Coucou ?

Pourquoi est ce que le fait de mettre des tab[] fait planter. normalement *tab équivaut à tab[]...

Pourquoi est ce que je suis obligé de passer par "(*tab)[taille]" pour parcourir mon tableau, au lieu de *tab[taille] ?

 

d'avance merci

 

++ iph

 

#include <stdio.h>

int l(char **tab) {
int taille = 0;
while((*tab)[taille] != '\0') {
	taille++;
}
printf("tab		  : %p\n", tab);	   // @ de tableau_de_char
printf("&tab		 : %p\n", &tab);	  // @ du pointeur tab
printf("&(*tab)	  : %p\n", &(*tab));   // @ de tableau_de_char
printf("*tab		 : %s\n", *tab);	  // Coucou
//	printf("tab[]		: %s\n", tab[]);	 // ERREUR
//	printf("(*tab)[]	 : %s\n", (*tab)[]);  // ERREUR
printf("(*tab)[0]	: %d\n", (*tab)[0]); //valeur ascii 
printf("taille **tab : %d\n", sizeof(**tab)); // taille d'un char
printf("taille tab   : %d\n", sizeof(tab));   // taille d'un pointeur
printf("**tab		: %d\n", **tab);		 //valeur ascii
printf("&(**tab)	 : %p\n", &(**tab));
return taille;
}

int main (void) {

char *tableau_de_char = "Coucou";
int taille = 0;
printf("&(*tab_...)  : %p\n",  &(*tableau_de_char));
printf("*tab_...	 : %d\n\n",  *tableau_de_char);  // val ascii du premier char
taille = l(&tableau_de_char);
printf("emplacement de tableau_de_char : %p\n", &tableau_de_char);
printf("taille : %d\n", taille);
printf("taille : %d\n", sizeof(tableau_de_char)); // taille d'un pointeur (4 octets)
printf("taille d'un char : %d \n", sizeof(char)); //taille d'un type char (1 octet)
return 0;
}

Lien vers le commentaire
Partager sur d’autres sites

Je viens de compiler et exécuter ton programme.

Voici le résultat :

&(*tab_...)  : 0x804870b
*tab_...	 : 67

tab		  : 0xbffff644
&tab		 : 0xbffff630
&(*tab)	  : 0xbffff644
*tab		 : Coucou
(*tab)[0]	: 67
taille **tab : 1
taille tab   : 4
**tab		: 67
&(**tab)	 : 0x804870b
emplacement de tableau_de_char : 0xbffff644
taille : 6
taille : 4
taille d'un char : 1 

Réponse à la question 1 :

- Tu as la valeur ascii et pas "Coucou" tout simplement parce que tu lui demandes d'afficher "%d" (donc un decimal) en lui passant en paramètre le premier caractère de ta chaîne...

 

Réponse à la question 2 :

- Ne confonds pas le C++ et le C. En C++ on peut effectivement substituer tab[] à *tab mais en C *tab correspond à tab[0] ! (C'est pour cette raison que le compilateur te colle une erreur à la ligne 12 lorsque tu vires le commentaire qui, soit dit en passant, n'est pas légal vis-à-vis des règles de programmation en C). Pour compiler du "vrai" C, perso j'utilise la commande "gcc -O2 -Wall -ansi -pedantic" comme ça je n'ai vraiment aucune raison de soupçonner la syntaxe de mon source et je peux me concentrer sur d'autres erreurs de programmation...

 

Réponse à la question 3 :

- Pour de sombres raisons de priorités d'opérateurs. Relis le K&R et tu auras les réponses. Il vaut mieux, pour des raisons de lisibilité et de maintenabilité, mettre les parenthèses de toute façon...

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...