Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1331 connectés 

  FORUM HardWare.fr
  Programmation
  C

  compréhension d'un petit code réécris issus de string.h

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compréhension d'un petit code réécris issus de string.h

n°2002958
jasinski13
Posté le 19-06-2010 à 14:14:08  profilanswer
 

Bonjour je débute dans la programmation en C et là je fait quelque petit exercice j'essaye de ré écrire les fonctions de string.h
 
et j'ai une petit questions à vous posez pour ce code çi:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int longeurChaine(const char* chaine);
  4. int main(int argc, char* argv[])
  5. {
  6.     char chaine[] = "Salut";
  7.     int longeur = 0;
  8.     longeur = longeurChaine(chaine);
  9.     printf("la chaine '%s' comprend %d caracteres de long", chaine, longeur);
  10.     return 0;
  11. }
  12. int longeurChaine(const char* chaine)
  13. {
  14.     int caractereActuel = 0;
  15.     char nombreDeCaractere = 0;
  16.     do
  17.     {
  18.         caractereActuel = chaine[nombreDeCaractere];
  19.         nombreDeCaractere++;
  20.     }while(caractereActuel != '\0');
  21.     nombreDeCaractere--;
  22.     return nombreDeCaractere;
  23. }


je voudrais sa voir pour quoi dans la fonction 'longeurChaine' que je déclare ma variable nombreDeCaractere si je la met de type 'int' cela ne marche pas et je suis obligé de la mettre de type 'char'???

mood
Publicité
Posté le 19-06-2010 à 14:14:08  profilanswer
 

n°2002970
gilou
Modérateur
Modzilla
Posté le 19-06-2010 à 14:47:46  profilanswer
 

Chez moi, ça marche.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2002972
jasinski13
Posté le 19-06-2010 à 15:07:33  profilanswer
 

Oui car dans ce code là nombreDeCaractere est de type 'char' essaye en le changeant en 'int' pour voir

n°2002976
jasinski13
Posté le 19-06-2010 à 15:31:49  profilanswer
 

RESOLUS  
Merci

n°2002983
gilou
Modérateur
Modzilla
Posté le 19-06-2010 à 16:05:55  profilanswer
 

jasinski13 a écrit :

Oui car dans ce code là nombreDeCaractere est de type 'char' essaye en le changeant en 'int' pour voir

Quand je disais que ça marchait, c'est avec le type de nombreDeCaractere mis à int, bien sur.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2023625
el muchach​o
Comfortably Numb
Posté le 18-09-2010 à 22:38:52  profilanswer
 

Un exercice facile qui devrait être presque obligatoire pour tous les étudiants qui apprennent le C, et peut s'avérer extrêmement utile par la suite : écrire une lib safestring.h qui agit sur des structures
string { char *str; size_t len }:

 

0. coder une fonction stringset(string *str, char c) qui remplit *str avec le char c

 

1. coder stringcpy(string *dst, string *src) et stringcat(string *str1, string *str2) de sorte que la string de destination puisse en cas de nécessité se réallouer dynamiquement en fonction de la taille de la source (la taille allouée étant multipliée par le nombre d'or à chaque réallocation), et puis string * stringdup(string *str) qui duplique la string

 

2. coder la transformation de string en char* et vice versa, ainsi que stringcmp(string *str1, string *str2)

 

3. coder les fonctions stringchcpy(string *dst, char *src) et stringchcat(string *str1, char *str2), ainsi que la fonction de comparaison stringchcmp(string *str1, char *str2)

 

4. coder une fonction substring(string *str, string *sub, size_t idx1, size_t idx2) qui retourne une sous-chaine de la première

 

5. Outre la sécurité contre les risques d'écrasements mémoire, quels autres avantages apporte une telle lib ? Quelles précautions doit-on prendre en l'utilisant ?

 

6. refaire le même exercice, mais avec cette fois-ci des tableaux statiques dans la structure string, donc pas d'allocation et de réallocation dynamique, mais vérification systématique des tailles à l'exécution: Toutes les fonctions doivent vérifier que leurs arguments sont corrects, de sorte qu'aucun dépassement ne soit possible, et gérer ce cas d'erreur en retournant un code d'erreur.

 

7. dans quel cas une telle lib peut s'avérer nécessaire ?

 

Maintenant, on veut créer une lib portant sur une structure buffer {byte *buf, int sz}. La différence principale entre buffer et string, est que buffer ne contient pas de '\0' final dans *buf, et sa taille est fixe et déterminée une fois pour toutes.
Malgré la ressemblance, les opérations utilisées sur buffers d'octets sont en général assez différentes des opérations sur chaines de caractères.

 

8. coder une fonction bufferset(buffer *str, byte c) qui initialise *str avec le byte c

 

9. coder une fonction buffercpy(buffer *dst, buffer *src) et bufferchcpy(buffer *dst, char *src), ainsi que les fonctions de transformation string *buffertostring(buffer *buf) et buffer * stringtobuffer(string *str)

 

10. coder une fonction size_t shiftleft(buffer *str, size_t n, byte c) et size_t shiftright(buffer *str, size_t n, byte c) qui déplace le contenu du buffer de n places vers la gauche/droite, en comblant les octets libérés dans le buffer avec le byte c, et retourne le nbre d'octets libérés

 

Toutes les fonctions doivent vérifier que leurs arguments sont corrects, gérer d'éventuelles troncations, et retourner un code d'erreur dans ce cas.

 

Et enfin, en exercice bonus, coder une fonction capable de repérer les fuites mémoires: elle gardera dans une structure de type Hashmap (le codage de Hashmap ne fait pas partie de l'exercice) les adresses des string et buffers alloués en clefs, et les tailles allouées, le nom du fichier source et le numéro de ligne en valeur. La taille sera mise à jour à chaque réallocation suite à un appel à stringcpy, stringchcpy, stringcat, stringchcat, etc. Enfin, les couples clef-valeur seront supprimés à chaque désallocation. On pourra consulter à tout moment la liste des allocations.


Message édité par el muchacho le 10-10-2010 à 21:19:38

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  compréhension d'un petit code réécris issus de string.h

 

Sujets relatifs
petit problème de div à résoudrePeut-on mettre du code html dans une base de donnée ?
Code marche pas need aideVBA-Bouton dynamique-Petit coup de pouce
Problème code PHP insertion données form dans DB[Résolu] Petit problème "for" déjà dans une boucle ...
Warning: mysqli_escape_string()Code javascript ne fonctionne pas sur firefox
Est ce que ce bout de code génère une allocation ? 
Plus de sujets relatifs à : compréhension d'un petit code réécris issus de string.h


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR