Bonsoir à tous,

Je ne comprends pas pourquoi le code suivant ne fonctionne pas:

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
21
22
23
24
25
26
 
#include <stdio.h>
 
main()
{
    char td[300];
    int nbc, nbt, i, j, k;
    char nomFichier[21];
 
    FILE *fichier;
 
    printf("nom du fichier à lister : ");
    scanf("%20s", nomFichier);
 
    fichier = fopen(nomFichier, "r");
 
    for (j = 0; j < 30; j++) {
    nbc = fread(td[j], sizeof(char), 30, fichier);
    nbt = nbc + nbt;
    }
    for (k = 0; k = nbt; k++)
    printf("%c", td[k]);
 
    printf("n");
    fclose(fichier);
}
J'obtiens l'alerte de compilation suivante :
warning: passing argument 1 of ‘fread’ makes pointer from integer without a cast

Et à l'exécution j'obtiens l'erreur suivante :
Segmentation fault: 11

Pourtant, lorsque je change le programme de la manière suivante :
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
21
22
23
24
 
#include <stdio.h>
 
main()
{
    char td[300];
    int nbc, nbt, i, j, k;
    char nomFichier[21];
 
    FILE *fichier;
 
    printf("nom du fichier à lister : ");
    scanf("%20s", nomFichier);
 
    fichier = fopen(nomFichier, "r");
    nbc = fread(td, sizeof(char), 30, fichier);
    for (i = 0; i < nbc; i++)
    printf("%c", td[i]);
 
    printf("n");
    fclose(fichier);
    printf("%d", nbc);
 
}
ça fonctionne correctement.
Donc pourquoi fread(td, sizeof(char), 30, fichier) ne renvoie pas d'erreur alors que fread(td[i], sizeof(char), 30, fichier) en renvoie une ?

Merci pour votre aide.