Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/09/2006, à 21:38

blitz

[resolu] probleme #include

bonjour tout le monde,

Je suis debutant en C
et surtout sous environnement UNIX et gcc et moi, on se connait pas encore bien,
soit j'ai ecrit un petit programme assez simple
qui utilise la library <string>
et une librairie "asciiart" qui contient une fonction getch()
(fonction presente dans la librairie <conio> sous windows)
c'est la premiere fois que j'inclus une library personnelle,
je connais donc mal la marche a suivre

et quand je compile, gcc me dit

/tmp/ccwKETmb.o : Dans la fonction "Data":gestion.c:(.text+0x1f2): AVERTISSEMENT: the `gets' function is dangerous and should not be used.
/tmp/ccwKETmb.o : Dans la fonction "main":gestion.c:(.text+0x1b4): référence indéfinie vers « getch »
collect2: ld a retourné 1 code d'état d'exécution

j'ai vu qu'il fallait renseigner les library en parametres, mais j'ai beau essayer avec -lstring et toute autre variante,  j'ai tout de meme le msg

/usr/bin/ld: ne peut trouver -lstring
collect2: ld a retourné 1 code d'état d'exécution

qqun pourrait-il me dire ce que je dois faire?
Merci d'avance

Dernière modification par blitz (Le 04/09/2006, à 18:44)

Hors ligne

#2 Le 02/09/2006, à 22:11

ithasu

Re : [resolu] probleme #include

Tu n'as pas besoin de mettre -lstring parce que ce n'est pas une librairie, mais juste une collection de fonctions.

Est-ce que tu as  fait les includes nécessaires pour la librairie ? Essaie de chopper un exemple pour voir comment ils font. On ne pourra pas te donner beaucoup plus de détails sans les sources.


Réalité Virtuelle ... Travail Réel !

Hors ligne

#3 Le 02/09/2006, à 22:21

blitz

Re : [resolu] probleme #include

oui biensur dsl,
voici les include de ma src

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "asciiart.h"   /* librairie de fonctions simple art ascii */

avec stdio.h (evidemment)
et stdlib.h, je n'ai aucun probleme je suppose que c'est pcq elles sont "standard"
cependant avec string.h, je copie a nouveau le message d'erreur que j'obtiens
en tapant

cc gestion.c -o gestion

(gestion.c est bien evidemment la source)
j'obtiens le msg

/tmp/ccVFuvqs.o : Dans la fonction "Data":gestion.c:(.text+0x1f2): AVERTISSEMENT: the `gets' function is dangerous and should not be used.
/tmp/ccVFuvqs.o : Dans la fonction "main":gestion.c:(.text+0x1b4): référence indéfinie vers « getch »
collect2: ld a retourné 1 code d'état d'exécution

Dernière modification par blitz (Le 02/09/2006, à 22:22)

Hors ligne

#4 Le 02/09/2006, à 22:50

tigrou

Re : [resolu] probleme #include

si il y a un asciiart.h c'est que tu dois avoir un asciiart.c ou quelque chose du genre où sont écrites les fonctions déclarées dans asciiart.h

à mon avis pour compiler ton programme tu devrais faire un truc du genre :

cc -c asciiart.c
cc -c gestion.c
cc gestion.o asciiart.o -o gestion

De manière à créer les fichiers "objets" de chacune de tes bibliothèques persos pour ensuite faire ton binaire final.

/tmp/ccVFuvqs.o : Dans la fonction "Data":gestion.c:(.text+0x1f2): AVERTISSEMENT: the `gets' function is dangerous and should not be used.

ce warning t'indique que la fonction gets est une fonction à éviter car selon la page du man, elle peut conduire à un dépassement de tampon et donc à des failles potentielles.

Hors ligne

#5 Le 02/09/2006, à 23:11

trucutu

Re : [resolu] probleme #include

et un -lm à la fin de ta ligne de commande cc ..., ca résoudrait ton problème ?


La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !

Hors ligne

#6 Le 03/09/2006, à 09:59

blitz

Re : [resolu] probleme #include

merci a tous,
la compilation se fait sans probleme!

par contre j'ai un autre petit probleme,
lors de l'execution de mon programme,
j'ai une fonction Data() qui selectionne un fichier de travail pour le reste de l'application

void Data(char *Pfile)
{
        char filename[15],t_filename[15], confirm;              /* chaine nom de fichier, caractere de validation */
        FILE *f;                                                /* pointeur sur FILE */

        /* saisie du numero de registre */
        printf("Entrez le numero de registre :");
        scanf("%s", filename);

        f = fopen(filename,"rb");

        if (!f)
        {
                fclose(f);
                f = fopen(filename,"wb");
        }
        else
        {
                do
                {
                        printf("le registre %s existe, voulez-vous y ajouter des donnees? ", *(filename));
                        scanf("%c", &confirm);
                } while (confirm != 'Y' && confirm != 'y' && confirm != 'N' && confirm != 'n');

                if (confirm == 'Y' || confirm == 'y')
                {
                        strcpy(t_filename,"t");
                        strcat(t_filename,Pfile);
                        UpdateData(Pfile, t_filename);
                        f = fopen(filename,"wb");
                }
        }
        fclose(f);
        strcpy(Pfile, filename);
}

et lors de l'execution du programme,
j'obtiens ceci:

Logiciel de gestion de comptes utilisateur
--------------------------------------------
Entrez le numero de registre :0001
Erreur de segmentation
yannick@yannick-desktop:~/C/test/myprog$

les 3 1eres lignes sont celles affichees par mon programme, mais "Erreur de Segmentation", est un msg d'erreur, et je ne comprends pas ce qu'est une erreur de segmentation, qq pourrait-il m'expliquer, si vous avez besoin d'autre partie du code, demandez le wink

Hors ligne

#7 Le 03/09/2006, à 10:40

abetsic

Re : [resolu] probleme #include

Une erreur de segmentation survient quand tu manipules des pointeurs ou des descripteurs de fichiers, si le pointeur ou le descripteur de fichier que tu utilises n'a pas une valeur correcte et que tu l'utilises pour faire des opérations avec, ça peut conduire à un segmentation fault.

A mon avis l'erreur est là :

if (!f)
        {
                fclose(f);
                f = fopen(filename,"wb");
        }

Si f vaut 0 c'est que le fopen qui précède à échoué, et donc tu n'as pas le droit de faire un fclose dessus (puisqu'il n'a pas été ouvert)

Hors ligne

#8 Le 03/09/2006, à 10:49

blitz

Re : [resolu] probleme #include

oui c vrai, j'avais pas pensé à ca, mais je voyais pas ce que cette erreur representait non plus merci bcp du renseignement!

Hors ligne

#9 Le 03/09/2006, à 10:59

blitz

Re : [resolu] probleme #include

re c encore moi,
je viens de modifier ma source j'ai donc mnt ceci:

    if (!f)
        {
                f = fopen(filename,"wb");
        }

et le programme me dit tout de meme "Erreur de segmentation"
je cherche donc une erreur ds les pointeurs, mais je ne trouve pas, revoici le code de ma fonction Data()

void Data(char *Pfile)
{
        char filename[15],t_filename[15], confirm;              /* chaine nom de fichier, caractere de validation */
        FILE *f;                                                /* pointeur sur FILE */

        /* saisie du numero de registre */
        printf("Entrez le numero de registre :");
        scanf("%s", filename);

        f = fopen(filename,"rb");

        if (!f)
        {
                f = fopen(filename,"wb");
        }
        else
        {
                do
                {
                        printf("le registre %s existe, voulez-vous y ajouter des donnees? ", filename);
                        scanf("%c", &confirm);
                } while (confirm != 'Y' && confirm != 'y' && confirm != 'N' && confirm != 'n');

                if (confirm == 'Y' || confirm == 'y')
                {
                        strcpy(t_filename,"t");
                        strcat(t_filename,Pfile);
                        UpdateData(Pfile, t_filename);
                        f = fopen(filename,"wb");
                }
        }
        fclose(f);
        strcpy(Pfile, filename);
}

[EDIT] : jviens de modifier, la variable filename, je l'avais renseignée comme pointeur dans le printf,
mais l'erreur ne viens tout de meme pas de la... sad
je continue a chercher biensur, mais si l'un de vous voyait plus vite l'erreur que moi,
ce serait sympa de me le dire wink
merci d'avance

Dernière modification par blitz (Le 03/09/2006, à 11:03)

Hors ligne

#10 Le 03/09/2006, à 11:08

ffomnislash

Re : [resolu] probleme #include

Normalement tu devrais ajouter des passages du genre:

f = fopen(filename,"rb");
if (f==NULL)
{
printf("erreur .....\n");
return -1;
}
else
{ suite du code ... }

-- Mon blog --

Hors ligne

#11 Le 03/09/2006, à 18:35

blitz

Re : [resolu] probleme #include

non en fait,

f = fopen(filename , "rb");
if (!f)
{
       f = fopen(filename, "wb");
}

ce serait pour que si le fichier n'existe pas, on le cree et on l'ouvre en ecriture
n'est-ce pas correct?

Hors ligne

#12 Le 04/09/2006, à 18:44

blitz

Re : [resolu] probleme #include

slt,

voila le probleme est resolu,
il fallait juste que je recompile les fichiers objets,
l'erreur etait bien mon fclose(f); superflu
merci bien a tous ! smile

Hors ligne