Problème boucle for en C

Ouss91 -  
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en C.

Je réalise un petit programme facile mais vu que je suis débutant j'ai du mal.

Ci-dessous respectivement le programme my_strlen qui est sensé calculer le nombre de caractères (dans string.c), le programme principal appelant la fonction my_strlen (main.c) et l'erreur :

#include<stdio.h>
#include<string.h>

int my_strlen(char tab[])
{       
        int nbChar = 0;
        for (int i=0; tab[i] != '\0'; i++)
        {
               nbChar++;
        }
        return nbChar;
}

#include<stdio.h>
#include<string.h>
#include </home/debian/Algorithmique/AlgoAvancé/TP1/string.c>

int main(){

        char chaineChar[]={'o','k','\0'};
        printf("Entrer une chaîne de caractères : ");
        scanf("%s", chaineChar);
        printf("%s", "Il y a ",my_strlen(chaineChar)," caractères.","\n");

}


L'erreur quand je compile le fichier string.c :
undefined reference to `main'
collect2: error: ld returned 1 exit status

Quand je compile le programme main.c, le programme demande d'entrer un string puis plus rien.

Help please :/

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

8 réponses

M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   162
 
Salut !
Ta fonction main est de type int (comme toujours), tu dois donc renvoyer un entier à la fin.
0 veut dire qu'il n'y a pas d'erreur, et un autre nombre si. Rajoute donc un return 0; à la fin de ta fonction main pour commencer :p
0
Ouss91
 
Salut,

du coup j'ai rajouté un return 0;
mais quand je compile le fichier string.c, la même erreur (comme quoi il manque un main())

:/
0
Ouss91
 
je rappelle que la fonction main() et my_strlen(char tab[]) sont stocker dans 2 fichiers différents
0
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   162
 
Et tu compiles le tout comment ? Car on dirait que tu essayes de compiler indépendamment ton autre fichier, et donc forcément il te crie dessus car il trouve pas la fonction main.
Par exemple avec gcc tu dois forcément commencer par ton fichier main.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ouss91
 
Exemple pour la compilation du main.c : gcc -o main main.c
Je complie chaque fichier, pas forcément dans un ordre précis.
Comment compiler du coup?
0
Ouss91
 
et quand je compile main.c, ca affiche bien "Entrer la chaine de caractères : " mais après plus rien...
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
Il n'y a pas d'ordre. Il faut compiler tous les fichiers et un seul doit avoir la fonction main().
gcc -o nom_du_programme string.c main.c


Tu peux aussi bien séparer les 2 compilations et l'édition des liens en l'écrivant en 3 lignes : les 2 premières produisent des fichiers objets (.o) la dernière relie le tout en un executable.
gcc -g -Wall -c main.c
gcc -g -Wall -c string.c
gcc -Wall main.o string.o -o nom_du_programme
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Dalfab,

Merci pour ta réponse !
En utilisant ta ligne de compilation (gcc -o nom_du_programme string.c main.c), j'obients l'erreur suivante : multiple definition of `my_strlen'; /tmp/cckbVTUH.o:string.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

Voici les codes :

main.c

#include<stdio.h>
#include<string.h>
#include "/home/debian/Algorithmique/AlgoAvancé/TP1/string.c"

int main(){
char chaineChar[]={'o','k','\0'};
printf("Entrer une chaîne de caractères : ");
scanf("%s", chaineChar);
printf("%s", "Il y a ", my_strlen(chaineChar), " caractères.\n");
return 0;

}



string.c

#include<stdio.h>
#include<string.h>
int my_strlen(char tab[])
{
int nbChar = 0;
for (int i=0; tab[i] != '\0'; i++)
{
nbChar++;
}
return nbChar;
}
0