Se connecter avec
S'enregistrer | Connectez-vous

pointeur null en C

Dernière réponse : dans Programmation

Bonjour!
Je voudrai creer en C une fonction qui renvoie un pointeur null ou l'addresse d'un caractere (je travaille sur des chaines de caracteres!).
J'ai trouvé des exemples qui utilisaient malloc calloc mais comme c'était avec des entiers j'ai pas trop compris....
Est ce que quelqu'un pourrait m'éclairer sur ce qu'est exactement un pointeur null é surtout comment on l'utilise!
Merci beaucoup!

Autres pages sur : pointeur null

Lassé par la pub ? Créez un compte

Citation :
Je voudrai creer en C une fonction qui renvoie un pointeur null ou l'addresse d'un caractere (je travaille sur des chaines de caracteres!).
J'ai trouvé des exemples qui utilisaient malloc calloc mais comme c'était avec des entiers j'ai pas trop compris....
Est ce que quelqu'un pourrait m'éclairer sur ce qu'est exactement un pointeur null

Ceci est un pointeur p initialisé avec la valeur NULL qui signifie 'invalide'.
  1. char *p = NULL;

Citation :
é surtout comment on l'utilise!

  1. if (p != NULL)
  2. {
  3. do_something_with(p);
  4. }

En gros, tu mets NULL par défaut et si tu trouves quelque chose tu change la valeur de p. Tu retournes p. Il aura la bonne valeur...

Si tu as des difficulltés, poste ton code.

la trotte a dit :
Ceci est un pointeur p initialisé avec la valeur NULL qui signifie 'invalide'.
  1. char *p = NULL;

Citation :
é surtout comment on l'utilise!

  1. if (p != NULL)
  2. {
  3. do_something_with(p);
  4. }

En gros, tu mets NULL par défaut et si tu trouves quelque chose tu change la valeur de p. Tu retournes p. Il aura la bonne valeur...

Si tu as des difficulltés, poste ton code.



Merci j'ai essayé mais ca marche pas!
J'ai comme erreur :
47 C:\Dev-Cpp\EXO4bis.c [Warning] assignment makes integer from pointer without a cast
Ca veut dire quoi?

Merci!

  1. # include <stdio.h>
  2. # include <string.h>
  3. # include <stdlib.h>
  4.  
  5. void saisie(char *);
  6. int recherche_bis(char*, char*);
  7.  
  8. int main()
  9. {
  10. ////////////////////////
  11. ///Deuxieme question///
  12. //////////////////////
  13. char *ch1;
  14. char *ch2;
  15. int j;
  16. printf ("Entrer une chaine de caracteres ch1\n");
  17. saisie(ch1);
  18. printf ("Entrer la chaine ch2 que vous voulez chercher dans ch1\n");
  19. saisie(ch2);
  20. j = recherche_bis(ch1, ch2);
  21. printf ("recherche_bis retourne %d", j);
  22. system("PAUSE");
  23. return 0;
  24. }
  25.  
  26. void saisie(char*chaine)
  27. {
  28. char c;
  29. while ((c = getchar())!= '\n')
  30. *(chaine++) = c;
  31. *chaine = '\0';
  32. }
  33.  
  34.  
  35. int recherche_bis(char*ch1, char*ch2)
  36. {
  37. int *p = NULL;
  38. while (*ch1 != '\0')
  39. {
  40. while ((*ch1 == *ch2)&&(*ch2 != '\0'))
  41. {
  42. ch1++;
  43. ch2++;
  44. }
  45. if (*ch2 == '\0')
  46. {
  47. *p = ch1;
  48. return *p;
  49. }
  50. ch1 = 0;
  51. }
  52. return *p;
  53. }

Citation :
Merci j'ai essayé mais ca marche pas!
J'ai comme erreur :
47 C:\Dev-Cpp\EXO4bis.c [Warning] assignment makes integer from pointer without a cast
Ca veut dire quoi?

La valeur (char) est incompatible avec la variable (pointeur sur char)
Citation :
  1. int recherche_bis(char*ch1, char*ch2)
  2. {
  3. int *p = NULL;
  4. return *p;
  5. return *p;
  6. }

Pourquoi *p ? J'ai dit
Citation :
Tu retournes p

pas
Citation :
Tu retournes *p

la trotte a dit :
La valeur (char) est incompatible avec la variable (pointeur sur char)
Citation :
  1. int recherche_bis(char*ch1, char*ch2)
  2. {
  3. int *p = NULL;
  4. return *p;
  5. return *p;
  6. }

Pourquoi *p ? J'ai dit
Citation :
Tu retournes p

pas
Citation :
Tu retournes *p



Oui mais si je mets return p
ca me met encore plus d'erreur!
Je comprend pas trop les erreurs é comment faut les corriger!
j'ai essayer de modifier et ca donne :
47 C:\Dev-Cpp\EXO4bis.c [Warning] assignment makes integer from pointer without a cast
48 C:\Dev-Cpp\EXO4bis.c [Warning] return makes integer from pointer without a cast
52 C:\Dev-Cpp\EXO4bis.c [Warning] return makes integer from pointer without a cast

avec comme code :

  1. # include <stdio.h>
  2. # include <string.h>
  3. # include <stdlib.h>
  4.  
  5. void saisie(char *);
  6. int recherche_bis(char*, char*);
  7.  
  8. int main()
  9. {
  10. ////////////////////////
  11. ///Deuxieme question///
  12. //////////////////////
  13. char *ch1;
  14. char *ch2;
  15. int j;
  16. printf ("Entrer une chaine de caracteres ch1\n");
  17. saisie(ch1);
  18. printf ("Entrer la chaine ch2 que vous voulez chercher dans ch1\n");
  19. saisie(ch2);
  20. j = recherche_bis(ch1, ch2);
  21. printf ("recherche_bis retourne %d", j);
  22. system("PAUSE");
  23. return 0;
  24. }
  25.  
  26. void saisie(char*chaine)
  27. {
  28. char c;
  29. while ((c = getchar())!= '\n')
  30. *(chaine++) = c;
  31. *chaine = '\0';
  32. }
  33.  
  34.  
  35. int recherche_bis(char*ch1, char*ch2)
  36. {
  37. char *p = NULL;
  38. while (*ch1 != '\0')
  39. {
  40. while ((*ch1 == *ch2)&&(*ch2 != '\0'))
  41. {
  42. ch1++;
  43. ch2++;
  44. }
  45. if (*ch2 == '\0')
  46. {
  47. *p = ch1;
  48. return p;
  49. }
  50. ch1 = 0;
  51. }
  52. return p;
  53. }

Citation :
Oui mais si je mets return p
ca me met encore plus d'erreur!
Je comprend pas trop les erreurs é comment faut les corriger!
j'ai essayer de modifier et ca donne :
47 C:\Dev-Cpp\EXO4bis.c [Warning] assignment makes integer from pointer without a cast
48 C:\Dev-Cpp\EXO4bis.c [Warning] return makes integer from pointer without a cast
52 C:\Dev-Cpp\EXO4bis.c [Warning] return makes integer from pointer without a cast

avec comme code :

  1. int recherche_bis(char*ch1, char*ch2)
  2. {
  3. char *p = NULL;
  4. return p;
  5. }

Oui, je ne l'avais pas vu, masi le type retourné par recherche_bis() doit être le même que celui de p...

D'une manière générale, il faut être cohérent...

donc là faut ke je fasse avec sizeof mé je le mé avant ou apré ma fonction saisie de chaine ? je me suis jamais servie de ca..... D'habitude je fais avec les tableaux c'est plus simple mé là jé pas le droit alor cé plus dur!
merci de ton aide!

Citation :
donc là faut ke je fasse avec sizeof mé je le mé avant ou apré ma fonction saisie de chaine ? je me suis jamais servie de ca..... D'habitude je fais avec les tableaux c'est plus simple mé là jé pas le droit alor cé plus dur!

C'est pas dur, mais il faut cesser de programmer au hasard et se former. (et soigner son orthographe, parce tu es limite incompréhensible, là. Ici, on parle français...).

Un site et un tuto site de plus en plus populaires, notamment chez les jeunes (-18) :

http://www.siteduzero.com/tuto-3-8-0-apprenez-a-program...
Lassé par la pub ? Créez un compte