pointeur null en C

  • Auteur de la discussion roulitasse
  • Date de début

roulitasse

Nouveau membre
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!
 

Emmanuel Delahaye

Expert
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'.
[cpp] char *p = NULL;[/cpp]
é surtout comment on l'utilise!
[cpp] if (p != NULL)
{
do_something_with(p);
}
[/cpp]
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.
 

roulitasse

Nouveau membre



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!

[cpp]# include <stdio.h>
# include <string.h>
# include <stdlib.h>

void saisie(char *);
int recherche_bis(char*, char*);

int main()
{
////////////////////////
///Deuxieme question///
//////////////////////
char *ch1;
char *ch2;
int j;
printf ("Entrer une chaine de caracteres ch1\n");
saisie(ch1);
printf ("Entrer la chaine ch2 que vous voulez chercher dans ch1\n");
saisie(ch2);
j = recherche_bis(ch1, ch2);
printf ("recherche_bis retourne %d", j);
system("PAUSE");
return 0;
}

void saisie(char*chaine)
{
char c;
while ((c = getchar())!= '\n')
*(chaine++) = c;
*chaine = '\0';
}


int recherche_bis(char*ch1, char*ch2)
{
int *p = NULL;
while (*ch1 != '\0')
{
while ((*ch1 == *ch2)&&(*ch2 != '\0'))
{
ch1++;
ch2++;
}
if (*ch2 == '\0')
{
*p = ch1;
return *p;
}
ch1 = 0;
}
return *p;
}
[/cpp]
 

Emmanuel Delahaye

Expert
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)
[cpp]int recherche_bis(char*ch1, char*ch2)
{
int *p = NULL;
return *p;
return *p;
}
[/cpp]
Pourquoi *p ? J'ai dit
Tu retournes p
pas
Tu retournes *p
 

roulitasse

Nouveau membre


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 :

[cpp]# include <stdio.h>
# include <string.h>
# include <stdlib.h>

void saisie(char *);
int recherche_bis(char*, char*);

int main()
{
////////////////////////
///Deuxieme question///
//////////////////////
char *ch1;
char *ch2;
int j;
printf ("Entrer une chaine de caracteres ch1\n");
saisie(ch1);
printf ("Entrer la chaine ch2 que vous voulez chercher dans ch1\n");
saisie(ch2);
j = recherche_bis(ch1, ch2);
printf ("recherche_bis retourne %d", j);
system("PAUSE");
return 0;
}

void saisie(char*chaine)
{
char c;
while ((c = getchar())!= '\n')
*(chaine++) = c;
*chaine = '\0';
}


int recherche_bis(char*ch1, char*ch2)
{
char *p = NULL;
while (*ch1 != '\0')
{
while ((*ch1 == *ch2)&&(*ch2 != '\0'))
{
ch1++;
ch2++;
}
if (*ch2 == '\0')
{
*p = ch1;
return p;
}
ch1 = 0;
}
return p;
}
[/cpp]
 

Emmanuel Delahaye

Expert
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 :

[cpp]
int recherche_bis(char*ch1, char*ch2)
{
char *p = NULL;
return p;
}
[/cpp]
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...
 

roulitasse

Nouveau membre
je suis perdue.....
Et c'est vraiment trop enervant quand cela ne veut pas marcher!
 

roulitasse

Nouveau membre
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!
 

Emmanuel Delahaye

Expert
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) :


 

sisier

Grand Maître
ola ... cela m'a l'air bien compliqué pour un code de comparaison de chaines.

Cela remonte à loin, le C pour moi mais un scanf .. n'aurais pas été plus simple.. surtout pour les allocations ..?

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 126
Messages
6 717 808
Membres
1 586 365
Dernier membre
matiOs1
Partager cette page
Haut