Problème boucle for en C

Fermé
Ouss91 - Modifié le 24 janv. 2021 à 11:31
Ouss91 Messages postés 35 Date d'inscription dimanche 24 janvier 2021 Statut Membre Dernière intervention 20 juillet 2021 - 24 janv. 2021 à 18:08
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 mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 162
24 janv. 2021 à 11:55
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
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
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 mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 162
24 janv. 2021 à 13:03
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
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
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 24 janv. 2021 à 18:07
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 dimanche 24 janvier 2021 Statut Membre Dernière intervention 20 juillet 2021
Modifié le 24 janv. 2021 à 18:10
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