Incident de segmentation C (en lecture de fic

____22 Messages postés 101 Statut Membre -  
mype Messages postés 2449 Statut Membre -
Bonjour,

le code:
#include <stdio.h>
main ()
{

FILE *fp;
char *s;
fp = fopen("fich.txt", "r");

    if (!fp) exit(1);
  
    while(!feof(fp))
    {
    
     fscanf(fp, "%s\n",&s); /* copy some info */
     printf("%s\n",s);
     
     }
      fclose(fp);
      
}


fich.txt contient 1 sur la 1ere ligne puis 2 ...

j'ai compilé ce prog avec gcc (sous linux)
j'obtiens
u»EÜÀt)EÔ9EàtUìMÔU¸EìMðéÂþÿÿMìM¸é·þÿÿUìU¸é¬þÿÿMÔEì9MðE¸þÿÿUìëËÇEÈ
»EÜÀt)EÔ9EàtUìMÔU¸EìMðéÂþÿÿMìM¸é·þÿÿUìU¸é¬þÿÿMÔEì9MðE¸þÿÿUìëËÇEÈ
ÆÒu»EÜÀt)EÔ9EàtUìMÔU¸EìMðéÂþÿÿMìM¸é·þÿÿUìU¸é¬þÿÿMÔEì9MðE¸þÿÿUìëËÇEÈ
Incident de segmentation

ou aussi des fois:

l previous options combined
previous options combined

Incident de segmentation
A voir également:

13 réponses

mype Messages postés 2449 Statut Membre 437
 
dans le fscanf tu es pas censé avoir "\n" apres "%s" et enleve aussi le "&" avant le "s"
0
____22 Messages postés 101 Statut Membre 1
 
pardon il y a aussi #include <string.h> dans le code

pour te répondre mype, \n et &s sont nécéssaires
ce code avait deja marché auparavant, maintenant ça marche plus
parceque peut etre la mémoire est saturée
0
mype Messages postés 2449 Statut Membre 437
 
si tu le dit...
0
mype Messages postés 2449 Statut Membre 437
 
si tu veux voici un programme qui fait ce que tu veux faire (les nombres dans le fichier texte vont jusqu'a 36 et ils sont chacun sur une ligne)

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

main ()
{
    FILE *fp;
    char *s;
    int i;

        fp = fopen("fich.txt", "r");
    if (!fp)
        exit(1);
   else
    {
    s=malloc(100);
        for(i=0;i<100;i++)
            fscanf(fp, "%c",&s[i]);
            printf("%s\n",s);
     }

      fclose(fp);
      free(s);
}
0

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

Posez votre question
____22 Messages postés 101 Statut Membre 1
 
je viens de réessayer mon programme

il affiche:
emory for thread-local data: ABORT

mory for thread-local data: ABORT

cate memory for thread-local data: ABORT

Incident de segmentation

pour ton programme il y a un probleme a la compilation:
renaud14 <5> gcc test.c
test.c: Dans la fonction « main »:
test.c:15: attention : affectation transforme un entier en pointeur sans transtypage
0
____22 Messages postés 101 Statut Membre 1
 
ligne 15: s=malloc(100);
0
mype Messages postés 2449 Statut Membre 437
 
c'est juste un warning je pense c'est pas une erreur comme je suis pas sur linux en ce moment sa me le dit pas

dans ce cas essaye ça

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

int main ()
{
    FILE *fp;
    char *s;
    int i;

        fp = fopen("fich.txt", "r");
    if (!fp)
        exit(1);
   else
    {
    s=malloc(100);
        for(i=0;i<100;i++)
            fscanf(fp, "%c",&s[i]);
            printf("%s\n",s);
     }

      fclose(fp);
      free(s);
return 0;
}
0
____22 Messages postés 101 Statut Membre 1
 
en enlevant s=malloc(100);

ça marche presque j'obtiens:
1
2
+
1
5
+
-
5
*
·0îñ·
free(): invalid pointer 0xb7f36540!
Incident de segmentation

(fich.txt contient 1\n2\n+\n1\n5\n+\n-\n5\n*\n
(\n retour a la ligne)

presque parceque incident de segmentation aurait stoppeé le reste du programme en cours
0
____22 Messages postés 101 Statut Membre 1
 
meme chose avec return 0; a la fin :(
0
mype Messages postés 2449 Statut Membre 437
 
chez moi ça marche...
c'est quoi le probleme que te dit le compilateur ?
0
____22 Messages postés 101 Statut Membre 1
 
1
2
+
1
5
+
-
5
*
ò·0þò·
free(): invalid pointer 0xb7f47540!
Incident de segmentation
0
mype Messages postés 2449 Statut Membre 437
 

il y a combien de caractere dans ton fichier ?
0
mype Messages postés 2449 Statut Membre 437
 
si tu connais le nombre de ligne tu peux utiliser ce programme et changer le nombre de ligne en fonction de ton fichier

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LIGNE 6

int main ()
{
    FILE *fp;
    char *s;
    int i;

        fp = fopen("fich.txt", "r");
    if (!fp)
        exit(1);
   else
    {
    s=malloc(100);
    for(i=1;i<=LIGNE;i++){
            fscanf(fp,"%s",s);
            printf("%s\n",s);}
     }

      fclose(fp);
      free(s);
return 0;
}
0