fonction manipulant les chaines de caractères

fonction manipulant les chaines de caractères - C - Programmation

Marsh Posté le 03-01-2014 à 15:26:00    

bonjour !:)
 
j'ai des probleme sur les fonction de chainne de caractére j'ai fait l'exercice de TP suivant mais ne compile pas :  
 
1.Déclarer une chaine de caractère PHRASE sans déterminer sa taille et faire le suivant :
 
a)Demander à l’utilisateur de saisir une chaine et l’affecte à PHRASE.
 
b)Affiche la taille de la chaine que l’utilisateur a saisit.
 
c)Déclarer une autre chaine constante CHAINE qui contient le mot suivant < Bonjour ! >, puis copier le contenu de cette chaine dans la première chaine PHRASE, et afficher les deux.
 
d)Modifier  (c) en copiant juste les 3 premiers caractères dans PHRASE, et afficher 2 chaines.
 
e)Demander à l’utilisateur de saisir un nom, puis affecter le à PHRASE, et afficher la concaténation de CHAINE et PHRASE.
 
f)Comparer CHAINE et PHRASE  à l’aide de la fonction de comparaison.  

Code :
  1. #include "stdafx.h"
  2. #include "string.h"
  3. #include "stdlib.h"
  4. int _tmain()
  5.    char nom[20];
  6.    char phrase[]="";
  7.    char CHAINE[]="Bonjour!";
  8.    printf("saisie vote chaine:\n" );
  9.    scanf("%s",&chaine);
  10.    phrase="chaine";
  11.    printf("La longueur de %s est : %d",phrase,strlen(phrase));
  12.    strcpy(t1,chaine2);
  13.    strncpy(t1,chaine2,3);
  14.    strncat(t1,chaine2,3);
  15.    printf("saisir un mon :" );
  16.    scanf("%s",&nom);
  17.    strcmp(phrase,chaine2);
  18. getchar();
  19. }


merci de m'indiquer  l'erreur .:(

Reply

Marsh Posté le 03-01-2014 à 15:26:00   

Reply

Marsh Posté le 03-01-2014 à 15:44:08    

Citation :

char CHAINE[]="Bonjour!";
   printf("saisie vote chaine:\n" );


Ne serait-ce pas printf("Saisissez votRe chaine" ); ?
 
D'accord je sors  [:leo892]

Reply

Marsh Posté le 03-01-2014 à 16:56:08    


char CHAINE[]="Bonjour!";
...
scanf("%s",&chaine);


chaine est déclaré nul part. Attention, le C est sensible aux majuscules et aux minuscules, et chaine est donc différent de CHAINE.
Ensuite, si chaine était déclarée par char chaine[] = "Bonjour !"; (en français, on a l'habitude de mettre un espace avant un point d'interrogation et de part et d'autre du signe égal),
alors chaine est un pointeur sur la zone "Bonjour !", et c'est donc déjà une adresse. Il est superflu de mettre l'esperluette (& ) dans le scanf() pour ce cas.
 

char phrase[]="";
...
phrase="chaine";


La première ligne est utilisée par le compilateur, pour créer un pointeur nommé phrase qui pointe en mémoire sur une zone qui contient "", autrement dit qui contient seulement un octet qui est le zéro binaire de fin de chaine.
La deuxième ligne essaye de faire pointer phrase sur une autre zone mémoire contenant le libellé "chaine".
Ce n'est pas logique. Soit on utilise ceci , sans réservé d'espace:

char *phrase;
...
phrase="chaine";


Soit (et c'est mieux) on utilise cela, en réservant de l'espace :  

char phrase[20];
...
strcpy(phrase, "chaine" );


De toutes manières, c'est bizarre.
J'ai l'impression qu'il est plutôt demandé de faire ça :

char phrase[20];
scanf("%s, phrase);


Reply

Marsh Posté le 03-01-2014 à 17:36:41    

billgatesanonym a écrit :


char CHAINE[]="Bonjour!";
...
scanf("%s",&chaine);


chaine est déclaré nul part. Attention, le C est sensible aux majuscules et aux minuscules, et chaine est donc différent de CHAINE.
Ensuite, si chaine était déclarée par char chaine[] = "Bonjour !"; (en français, on a l'habitude de mettre un espace avant un point d'interrogation et de part et d'autre du signe égal),
alors chaine est un pointeur sur la zone "Bonjour !", et c'est donc déjà une adresse. Il est superflu de mettre l'esperluette (& ) dans le scanf() pour ce cas.
 

char phrase[]="";
...
phrase="chaine";


La première ligne est utilisée par le compilateur, pour créer un pointeur nommé phrase qui pointe en mémoire sur une zone qui contient "", autrement dit qui contient seulement un octet qui est le zéro binaire de fin de chaine.
La deuxième ligne essaye de faire pointer phrase sur une autre zone mémoire contenant le libellé "chaine".
Ce n'est pas logique. Soit on utilise ceci , sans réservé d'espace:

char *phrase;
...
phrase="chaine";


Soit (et c'est mieux) on utilise cela, en réservant de l'espace :  

char phrase[20];
...
strcpy(phrase, "chaine" );


De toutes manières, c'est bizarre.
J'ai l'impression qu'il est plutôt demandé de faire ça :

char phrase[20];
scanf("%s, phrase);




merci .
mais dans l'exercice il dit Déclarer une chaine de caractère PHRASE sans déterminer sa taille et faire le suivant  
 
a)Demander à l’utilisateur de saisir une chaine et l’affecte à PHRASE.
comment je fait ça ?
merci

Reply

Marsh Posté le 03-01-2014 à 19:01:19    

Citation :

Déclarer une chaine de caractère PHRASE sans déterminer sa taille

Donc il faut faire
char *PHRASE;
et pour le reste, man getline.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-01-2014 à 19:09:09    

gilou a écrit :

Citation :

Déclarer une chaine de caractère PHRASE sans déterminer sa taille

Donc il faut faire
char *PHRASE;
et pour le reste, man getline.
 
A+,


merci ^^ .
mais nous avons fait ce TP avant d'etudier les pointeur .
pour cela j'ai fait pas les pointeur.
il n ya pas d'autre methode ?

Reply

Marsh Posté le 03-01-2014 à 23:38:11    

Non.  
En C, un tableau a besoin de connaître sa taille à sa déclaration.
Si on en connait pas la taille, on déclare un pointeur, qui prendra comme valeur, l'adresse de la chaîne quand celle-ci aura été allouée.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed