Bonjour à tous, je tente de bien comprendre les structures en C mais je me heurte à un petit problème c'est la raison pour laquelle je viens ici..

Code fonctionnel :

main.c:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
 
int main(int argc, char *argv[])
{
    Caracteristiques cara;
    char proc[] = "Intel";
    char os[] = "Windows";
    strcpy(cara.Processeur, proc);
    strcpy(cara.OS, os);
    printf("Processeur: %s\nOs: %s", cara.Processeur, cara.OS);
    return 0;
}
main.h:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
 
typedef struct Caracteristiques Caracteristiques;
 
struct Caracteristiques {
    char Processeur[64];
    char OS[32];
};
 
#endif // MAIN_H_INCLUDED
Lorsque je veux créer une fonction faisant exactement la même chose sa ne fonctionne pas..

Code bugger:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
 
void remplir(Caracteristiques cara, char *proc, char *os){
    strcpy(cara.Processeur, proc);
    strcpy(cara.OS, os);
}
 
int main(int argc, char *argv[])
{
    Caracteristiques cara;
    char proc[] = "Intel";
    char os[] = "Windows";
    remplir(cara, proc, os);
    printf("Processeur: %s\nOs: %s", cara.Processeur, cara.OS);
    return 0;
}
Le main.h étant toujours le même.

J'ai penser à mettre ma variable cara en tant que pointeur ou envoyé l'adresse mémoire à la place de la variable directement (ce qui me semble plus plausible mais le code présenté peut build au moins).

Des idées?

EDIT: Résolu:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
 
void remplir(Caracteristiques *cara, char *proc, char *os){
    strcpy((*cara).Processeur, proc);
    strcpy((*cara).OS, os);
}
 
int main(int argc, char *argv[])
{
    Caracteristiques cara;
    char proc[] = "Intel";
    char os[] = "Windows";
    remplir(&cara, proc, os);
    printf("Processeur: %s\nOs: %s", cara.Processeur, cara.OS);
    return 0;
}
Mais je me pose une autre question, comment faire pour déclarer ma variable cara en tant que pointeur pour ne pas envoyé d'adresse a ma fonction?
Du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Caracteristiques *cara;
remplir(cara, proc, os);
Tout se passe bien jusqu'au printf ! Pourquoi le printf plante?