Bonjour,
je cherche un equivalent de la fonction gcount en C.
Merci pour votre aide ++
Version imprimable
Bonjour,
je cherche un equivalent de la fonction gcount en C.
Merci pour votre aide ++
Et elle fait quoi cette fonction ? T'est un peu light, y'a pas tout le monde qui connais !
Non?Code:
1
2
3 text = gets (text); // text de type char* correctement initialisé int n = strlen (text);
nan mais laisse, c'est a propos du topic "std:: programme c", ce sont des fonctions définies dans son code, et on lui a dit que c'était pas standard qu'il fallait lire les sources, mais visiblement il a pas saisi
Il faut jamais utiliser gets mais plutôt fgets ... à garder ca en mémoire ;)Citation:
Envoyé par Fabllot
Juste après un appel getline, la fonction-membre gcount() permet de savoir quelle est la longueur de la chaine de caractères effectivement lue.
Mais apparement cette fonction vient du C++ et n'est pas compatible en C.
Certes, mais du coup la question n'a plus raison d'être puisque qu'on indique le nombre de caractère à lire dans les paramètres de fgets...
Pardon, le maximum de caractères à lire ... Mea Culpa...
Bin logique, ce qui viens du C peut être dans une certaines mesure compatible avec le C++ mais l'inverse tu peux oublier, il faut alors créer tes propres routines ou utiliser des bibliothèques comme GLib par exemple pour certains cas !Citation:
Envoyé par gy0m76
Donc, sauf erreur de ma part :
Code:
1
2
3
4
5
6 char saisie[20]; fgets (saisie, sizeof saisie, stdin); /* nb est le nombre de caractères effectivement lus */ int nb = strlen(saisie);
On ne connais "jamais" par avance le nombre d'octets lus, même avec une saisie par stdin ... mais on indique un maximum à fgets pour le buffer puis après tu peux éventuellement déterminer la taille réelle de la chaîne !Citation:
Envoyé par Fabllot
En fait dans mon cas, je lit le nombre de pixel d'une image et ensuite je veut comparer si cette valeur est différente de 0
Code:
1
2
3 fread(buf, 4096, 4096, bmp); if (gcount(bmp) != 0) ....
C'est ça ?Citation:
Envoyé par gy0m76
http://www.cppreference.com/cppio/gcount.html
- Si tu utlises fgetc() et que tu ne retournes pas EOF, gcount vaut 1
- Si tu utilises fread() et que la valeur retournée est égale au nombre d'éléments passés en paramètre (lire la doc), gcount vaut la valeur retournée x la taille d'un élément.
- Si tu utilises fgets() et que celui ci n'a pas retourné NULL, gcount est la longueur de la chaine lue (strlen).
Oui presque, il faut juste déterminer si le caractère \n est présent (ce qui indique une chaîne complète avec un retour chariot (saisie validée par l'utilisateur en appuyant sur Enter) et le remplacer par un zéro de fin de chaîne.Citation:
Envoyé par zooro
En le disant dès le début, on aurait pu te répondre directement...Citation:
Envoyé par gy0m76
Une brêve lecture du man de fread nous donne :
Citation:
fread et fwrite renvoient le nombre d'éléments correctement lus ou écrits (et non pas le nombre d'octets).
Exact.Citation:
Envoyé par Franck.H
Je l'oublie toujours celui-là ! ;)
gets(), c'est le Diable. :fessee:Citation:
Envoyé par Fabllot
Vade retro, gets() ! :mouarf:Citation:
Envoyé par Emmanuel Delahaye
Va falloir apprendre à être plus précis sur ce que tu veux et pourquoi tu le veux, ca nous évitera de taper 50 posts avant que tu nous dise la vraie raison !Citation:
Envoyé par gy0m76
J'y penserait pour la prochaine fois, merci a tous pour votre aide en tout cas.
Voila ce que j'ai modifier
Code:
1
2
3 int i; i = fread(buf, 4096, 4096, bmp); if (i != 0)