Comparison between pointer and integer
nounou.ing
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
salut :)
Quand je compile ce code source avec DevC ++, il m'indique cette erreur là "comparison between pointer and integer "
y a-t- il qcq qui peut m'aider
ce code permet de partager un fichier ( chaque ligne contient un seul mot) en 4 nouveau fichier selon la langueur du mot
voila le code:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define f "french_wordlist_sans_accent.txt"
int main ( int argc, char argv[ ] )
{
FILE* fichier5 = NULL;
FILE* fichier6 = NULL;
FILE* fichier7 = NULL;
FILE* fichier8 = NULL;
FILE* fichier;
char caractereActuel[]="";
char motAct[]="";
fichier = fopen (f,"r");
fichier5 = fopen ("mot5.txt", "a+");
fichier6 = fopen ("mot6.txt", "a+");
fichier7 = fopen ("mot7.txt", "a+");
fichier8 = fopen ("mot8.txt", "a+");
if ((fichier = fopen (f,"r")) == NULL)
{
printf("ERREUR");
fprintf(stderr, "\n Erreur: Impossible de lire le fichier f %s\n",f);
return(EXIT_FAILURE);
}
caractereActuel == fgetc(fichier);
while (caractereActuel != "\n")
motAct =strcpy(motAct,caractereActuel);
switch (strlen(motAct))
{
case 5: fputs(motAct, fichier5);
printf("\n");
break;
case 6: fputs(motAct, fichier6);
printf("\n");
break;
case 7: fputs(motAct, fichier7);
printf("\n");
break;
case 8: fputs(motAct, fichier5);
printf("\n");
break;
default:
printf("ERROR\n");
break;
}
fclose(fichier);
fclose(fichier5);
fclose(fichier6);
fclose(fichier7);
fclose(fichier8);
return 0;
}
Quand je compile ce code source avec DevC ++, il m'indique cette erreur là "comparison between pointer and integer "
y a-t- il qcq qui peut m'aider
ce code permet de partager un fichier ( chaque ligne contient un seul mot) en 4 nouveau fichier selon la langueur du mot
voila le code:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define f "french_wordlist_sans_accent.txt"
int main ( int argc, char argv[ ] )
{
FILE* fichier5 = NULL;
FILE* fichier6 = NULL;
FILE* fichier7 = NULL;
FILE* fichier8 = NULL;
FILE* fichier;
char caractereActuel[]="";
char motAct[]="";
fichier = fopen (f,"r");
fichier5 = fopen ("mot5.txt", "a+");
fichier6 = fopen ("mot6.txt", "a+");
fichier7 = fopen ("mot7.txt", "a+");
fichier8 = fopen ("mot8.txt", "a+");
if ((fichier = fopen (f,"r")) == NULL)
{
printf("ERREUR");
fprintf(stderr, "\n Erreur: Impossible de lire le fichier f %s\n",f);
return(EXIT_FAILURE);
}
caractereActuel == fgetc(fichier);
while (caractereActuel != "\n")
motAct =strcpy(motAct,caractereActuel);
switch (strlen(motAct))
{
case 5: fputs(motAct, fichier5);
printf("\n");
break;
case 6: fputs(motAct, fichier6);
printf("\n");
break;
case 7: fputs(motAct, fichier7);
printf("\n");
break;
case 8: fputs(motAct, fichier5);
printf("\n");
break;
default:
printf("ERROR\n");
break;
}
fclose(fichier);
fclose(fichier5);
fclose(fichier6);
fclose(fichier7);
fclose(fichier8);
return 0;
}
A voir également:
- Warning: comparison between pointer and integer
- Spybot search and destroy - Télécharger - Antivirus & Antimalwares
- Find and mount - Télécharger - Récupération de données
- Warning zone telechargement - Accueil - Outils
- Disk boot failure insert system disk and press enter - Guide
- Norton remove and reinstall. - Télécharger - Nettoyage
12 réponses
char caractereActuel[]=""; >> ca c'est une tableau de char
caractereActuel == fgetc(fichier); >> ca c'est un bug car == c'est une test, pas une affectation
donc char caractereActuel="";
et caractereActuel = fgetc(fichier);
ca devrait marcher mieux
caractereActuel == fgetc(fichier); >> ca c'est un bug car == c'est une test, pas une affectation
donc char caractereActuel="";
et caractereActuel = fgetc(fichier);
ca devrait marcher mieux
Merci bien Krysstof , très gentil .
j'ai remplacé le test par une affectation et strcpy par strcat mais ça n'a pas encore marché.
De nouveau il m'indique cette erreur là " incompatible types in assignment "
dans ces deux ligne
caractereActuel = fgetc(fichier);
motAct = strcat(motAct,caractereActuel);
j'ai remplacé le test par une affectation et strcpy par strcat mais ça n'a pas encore marché.
De nouveau il m'indique cette erreur là " incompatible types in assignment "
dans ces deux ligne
caractereActuel = fgetc(fichier);
motAct = strcat(motAct,caractereActuel);
salut.
je n'est changée ce que tu viens d'indiquer car si je fais ce changement , il aura ces erreurs là
" initialization makes integer from pointer without a cast" pour char caractereActuel="";
" comparison between pointer and integer" pour caractereActuel != "\n"
"passing arg 2 of 'strcat' makes pointer from integer without a cast " et "incompatible types in assignment "
pour motAct = strcat(motAct,caractereActuel); e
donc le changement effectue plus de difficulté
je n'est changée ce que tu viens d'indiquer car si je fais ce changement , il aura ces erreurs là
" initialization makes integer from pointer without a cast" pour char caractereActuel="";
" comparison between pointer and integer" pour caractereActuel != "\n"
"passing arg 2 of 'strcat' makes pointer from integer without a cast " et "incompatible types in assignment "
pour motAct = strcat(motAct,caractereActuel); e
donc le changement effectue plus de difficulté
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bon, c vrai que j'ai pas expliqué en détail ... fgetc(); renvoie une variable de type char
un char est un entier sur 8 bits (de 0 a 255)
on représente un caractere soit en mettant un chiffre, soit le caractere entre simple quote
donc
" initialization makes integer from pointer without a cast" pour char caractereActuel="";
== > caractereActuel=''; (pas "")
"comparison between pointer and integer" pour caractereActuel != "\n"
==> caractereActuel != '\n'
ensuite les fonctions strcpy, strcat, etc... sont des fonctions de chaine de caractere
une chaine de caractere est en fait un pointeur vers un tableau de char
donc si tu déclare une variable de type char, tu ne peux pas utiliser les fonctions de chaine directement dessus.
la malheureusement j'ai un trou de mémoire : comment transformer un char en en string... (ca fait 8 ans que j'ai pas fait de pointeur en c :) )
donc pour
"passing arg 2 of 'strcat' makes pointer from integer without a cast " et "incompatible types in assignment "
pour motAct = strcat(motAct,caractereActuel); e
essaye
motAct = strcat(motAct,&caractereActuel)
le & collé au nom de la variable représente le pointeur vers la variable.
un char est un entier sur 8 bits (de 0 a 255)
on représente un caractere soit en mettant un chiffre, soit le caractere entre simple quote
donc
" initialization makes integer from pointer without a cast" pour char caractereActuel="";
== > caractereActuel=''; (pas "")
"comparison between pointer and integer" pour caractereActuel != "\n"
==> caractereActuel != '\n'
ensuite les fonctions strcpy, strcat, etc... sont des fonctions de chaine de caractere
une chaine de caractere est en fait un pointeur vers un tableau de char
donc si tu déclare une variable de type char, tu ne peux pas utiliser les fonctions de chaine directement dessus.
la malheureusement j'ai un trou de mémoire : comment transformer un char en en string... (ca fait 8 ans que j'ai pas fait de pointeur en c :) )
donc pour
"passing arg 2 of 'strcat' makes pointer from integer without a cast " et "incompatible types in assignment "
pour motAct = strcat(motAct,caractereActuel); e
essaye
motAct = strcat(motAct,&caractereActuel)
le & collé au nom de la variable représente le pointeur vers la variable.
malgres que j'ai remplacé
caractereActuel=""; par caractereActuel=''; (pas "")
et motAct = strcat(motAct,caractereActuel); par
motAct = strcat(motAct,&caractereActuel)
il affiche cette erreur : incompatible types in assignment.
malgres que tu m'indiquer que le & ajouter va elever cette erreur .
!!!!!!!
caractereActuel=""; par caractereActuel=''; (pas "")
et motAct = strcat(motAct,caractereActuel); par
motAct = strcat(motAct,&caractereActuel)
il affiche cette erreur : incompatible types in assignment.
malgres que tu m'indiquer que le & ajouter va elever cette erreur .
!!!!!!!
comme je disais ca fait super longtemps que j'ai pas programmé en C...
on va essayer ca :
c'est pas tres propre, mais comme cela tu es sur que tu converti le caractere seul en une chaine de caractere contenat ce caractere...
ca donnerait ca avec la boucle
on va essayer ca :
//déclaration char caractereActuel=''; char tempchaine[1]=""; //transformation du char en string (char *) tempchaine[0] = caractereactuel; //concaténation des 2 chaines motAct = strcat(motAct,tempchaine)
c'est pas tres propre, mais comme cela tu es sur que tu converti le caractere seul en une chaine de caractere contenat ce caractere...
ca donnerait ca avec la boucle
caractereActuel =fgetc(fichier);
while (caractereActuel != '\n')
{
tempchaine[0] = caractereactuel;
motAct =strcat(motAct,tempchaine);
caractereActuel =fgetc(fichier);
}
même avec cette solution l'erreur reste .
incompatible types in assignment pour
motAct = strcat(motAct,tempchaine);
et
motAct =strcat(motAct,tempchaine);
incompatible types in assignment pour
motAct = strcat(motAct,tempchaine);
et
motAct =strcat(motAct,tempchaine);
hum... redonne ton code complet avec les dernière modification s'il te plait, car la je comprends pas...
(pense à utiliser les balises de code en appuyant sur le petit bouton en haut du message "<>" a droite des boutons B I S)
(pense à utiliser les balises de code en appuyant sur le petit bouton en haut du message "<>" a droite des boutons B I S)
Bonjour,
J'ai survolé de très haut, mais, il y a une erreur ici en tout cas :
motAct = strcat(motAct,tempchaine);
motAct est défini comment ? Pointeur ou tableau ? Est-il alloué ?
J'ai survolé de très haut, mais, il y a une erreur ici en tout cas :
motAct = strcat(motAct,tempchaine);
motAct est défini comment ? Pointeur ou tableau ? Est-il alloué ?
c mon code source
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define f "french_wordlist_sans_accent.txt"
int main ( int argc, char argv[ ] )
{
FILE* fichier5 = NULL;
FILE* fichier6 = NULL;
FILE* fichier7 = NULL;
FILE* fichier8 = NULL;
FILE* fichier;
char caractereActuel = '';
char motAct[] ="";
char tempchaine[1]="";
//transformation du char en string (char *)
tempchaine[0] = caractereActuel;
//concaténation des 2 chaines
motAct = strcat(motAct,tempchaine);
fichier = fopen (f,"r");
fichier5 = fopen ("mot5.txt", "a+");
fichier6 = fopen ("mot6.txt", "a+");
fichier7 = fopen ("mot7.txt", "a+");
fichier8 = fopen ("mot8.txt", "a+");
if ((fichier = fopen (f,"r")) == NULL)
{
printf("ERREUR");
fprintf(stderr, "\n Erreur: Impossible de lire le fichier f %s\n",f);
return(EXIT_FAILURE);
}
// motAct = fgets(fichier);
//caractereActuel = fgetc(fichier);
caractereActuel =fgetc(fichier);
while (caractereActuel != '\n')
{
tempchaine[0] = caractereActuel;
motAct =strcat(motAct,tempchaine);
caractereActuel =fgetc(fichier);
}
// while (caractereActuel != '\n')
// motAct = strcat(motAct,&caractereActuel);
switch (strlen(motAct))
{
case 5: fputs(motAct, fichier5);
printf("\n");
break;
case 6: fputs(motAct, fichier6);
printf("\n");
break;
case 7: fputs(motAct, fichier7);
printf("\n");
break;
case 8: fputs(motAct, fichier5);
printf("\n");
break;
default:
printf("ERROR\n");
break;
}
fclose(fichier);
fclose(fichier5);
fclose(fichier6);
fclose(fichier7);
fclose(fichier8);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define f "french_wordlist_sans_accent.txt"
int main ( int argc, char argv[ ] )
{
FILE* fichier5 = NULL;
FILE* fichier6 = NULL;
FILE* fichier7 = NULL;
FILE* fichier8 = NULL;
FILE* fichier;
char caractereActuel = '';
char motAct[] ="";
char tempchaine[1]="";
//transformation du char en string (char *)
tempchaine[0] = caractereActuel;
//concaténation des 2 chaines
motAct = strcat(motAct,tempchaine);
fichier = fopen (f,"r");
fichier5 = fopen ("mot5.txt", "a+");
fichier6 = fopen ("mot6.txt", "a+");
fichier7 = fopen ("mot7.txt", "a+");
fichier8 = fopen ("mot8.txt", "a+");
if ((fichier = fopen (f,"r")) == NULL)
{
printf("ERREUR");
fprintf(stderr, "\n Erreur: Impossible de lire le fichier f %s\n",f);
return(EXIT_FAILURE);
}
// motAct = fgets(fichier);
//caractereActuel = fgetc(fichier);
caractereActuel =fgetc(fichier);
while (caractereActuel != '\n')
{
tempchaine[0] = caractereActuel;
motAct =strcat(motAct,tempchaine);
caractereActuel =fgetc(fichier);
}
// while (caractereActuel != '\n')
// motAct = strcat(motAct,&caractereActuel);
switch (strlen(motAct))
{
case 5: fputs(motAct, fichier5);
printf("\n");
break;
case 6: fputs(motAct, fichier6);
printf("\n");
break;
case 7: fputs(motAct, fichier7);
printf("\n");
break;
case 8: fputs(motAct, fichier5);
printf("\n");
break;
default:
printf("ERROR\n");
break;
}
fclose(fichier);
fclose(fichier5);
fclose(fichier6);
fclose(fichier7);
fclose(fichier8);
return 0;
}
Salut,
Merci pour votre participation dans la résolution de mon problème.
char motAct[] =""; tableau de caractere.
il n'est pas alloué. on n'a pas besoin de faire une allocation.
Merci pour votre participation dans la résolution de mon problème.
char motAct[] =""; tableau de caractere.
il n'est pas alloué. on n'a pas besoin de faire une allocation.
il n'est pas alloué. on n'a pas besoin de faire une allocation.
Ben si justement. Cette déclaration permer d'allouer statiquement. Dans votre exemple, vous allouez un tableau d'un caractère dans la pile qui contiendra le caractère '\0'. En gros, une chaîne inutile.
char tempchaine[1]="";
Même remarque.
int main ( int argc, char argv[ ] )
C'est char *argv[] ou char **argv, mais pas char argv[]. Il s'agit d'un pointeur sur des chaînes de caractères.
char caractereActuel = '';
Il faut mettre un caractère entre les crochets. Sinon le compilateur ne pourra pas initialisé avec le code ascii correspondant.
tempchaine[0] = caractereActuel;
Comme dit plus haut, le problème est que vous allez écrire sur le caractère '\0', qui est obligatoire pour finir une chaîne. D'autant plus que vous utilisez strcat qui se base dessus.
Il faudrait donc allouer un caractère de plus dans le tableau. Soit : char tempchaine[2]="";
motAct = strcat(motAct,tempchaine);
Vous utilisez mal la fonction. strcat(motAct, tempchaine) suffit. Cela concatène en écrivant à l'adresse pointée par le pointeur motAct. En plus, attention motAct comme le tableau tempchaine n'est pas assez grand. La taille dépendra du nombre de caractères que vous souhaitez mettre dedans. On se sert de la valeur de renvoie notamment dans les boucles while pour tester si strcat ne renvoie pas NULL.
Bon et j'arrête là, car ça vous fera déjà pas mal de points à revoir.
Sinon pourquoi n'utilisez vous pas la fonction fgets qui fait toute votre moulinette fgetc + la condition sur le '\n' de fin de ligne ? Si c'est à titre d'entrainement, autant se la recoder et se faire une fonction que répéter tous ses blocs faux. Cela augmentera la lisibilité du programme, et sa maintenabilité.
Si vous avez des questions, n'hésitez pas.
Bonne chance,
Cordialement
Ben si justement. Cette déclaration permer d'allouer statiquement. Dans votre exemple, vous allouez un tableau d'un caractère dans la pile qui contiendra le caractère '\0'. En gros, une chaîne inutile.
char tempchaine[1]="";
Même remarque.
int main ( int argc, char argv[ ] )
C'est char *argv[] ou char **argv, mais pas char argv[]. Il s'agit d'un pointeur sur des chaînes de caractères.
char caractereActuel = '';
Il faut mettre un caractère entre les crochets. Sinon le compilateur ne pourra pas initialisé avec le code ascii correspondant.
tempchaine[0] = caractereActuel;
Comme dit plus haut, le problème est que vous allez écrire sur le caractère '\0', qui est obligatoire pour finir une chaîne. D'autant plus que vous utilisez strcat qui se base dessus.
Il faudrait donc allouer un caractère de plus dans le tableau. Soit : char tempchaine[2]="";
motAct = strcat(motAct,tempchaine);
Vous utilisez mal la fonction. strcat(motAct, tempchaine) suffit. Cela concatène en écrivant à l'adresse pointée par le pointeur motAct. En plus, attention motAct comme le tableau tempchaine n'est pas assez grand. La taille dépendra du nombre de caractères que vous souhaitez mettre dedans. On se sert de la valeur de renvoie notamment dans les boucles while pour tester si strcat ne renvoie pas NULL.
Bon et j'arrête là, car ça vous fera déjà pas mal de points à revoir.
Sinon pourquoi n'utilisez vous pas la fonction fgets qui fait toute votre moulinette fgetc + la condition sur le '\n' de fin de ligne ? Si c'est à titre d'entrainement, autant se la recoder et se faire une fonction que répéter tous ses blocs faux. Cela augmentera la lisibilité du programme, et sa maintenabilité.
Si vous avez des questions, n'hésitez pas.
Bonne chance,
Cordialement
caractereActuel =fgetc(fichier);
while (caractereActuel != "\n")
{
motAct =strcat(motAct,caractereActuel);
caractereActuel =fgetc(fichier);
}
tu remarquera strcat a la place de strcpy, pour concatener tous les caractere lu un a un
tu peux aussi remplacer tout ca par
motAct = fgets(fichier);