Probleme fopen (C)
Résolu/Fermé
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
-
16 févr. 2009 à 16:58
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 - 19 févr. 2009 à 21:19
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 - 19 févr. 2009 à 21:19
A voir également:
- Arduino fopen
- Processing arduino download - Télécharger - Langages
- Php fopen utf8 ✓ - Forum PHP
- Arduino math.h - Forum C++
- Arduino sanguino - Forum Logiciels
- Fopen php - Forum PHP
18 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 févr. 2009 à 17:21
16 févr. 2009 à 17:21
le code a l'air correct...
tu es sur que le fichier texte est dans le meme repertoire que l'executable ?
tu peux essayer en passant le chemin complet
tu es sur que le fichier texte est dans le meme repertoire que l'executable ?
tu peux essayer en passant le chemin complet
fichier = fopen("C:\\chemin\\test.txt", "r");
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 févr. 2009 à 17:11
16 févr. 2009 à 17:11
poste ton code
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
16 févr. 2009 à 17:16
16 févr. 2009 à 17:16
ah oui excuse moi j'ai oublié
mon code:
tests.h
je ne sais pas ceque je dois mettre
main.c
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("test.txt", "r");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
mon code:
tests.h
je ne sais pas ceque je dois mettre
main.c
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("test.txt", "r");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
Oh si la fonction 'fopen' ne fonctionnait pas correctement... il y a longtemps que cela se saurait! Donc elle fonctionne.
Si tu n'as pas le résultat escompté, 3 solutions:
1) le mode d'ouverture choisi n'est pas correct,
2) tu n'as pas les droits corrects sur le fichier,
3) le fichier ne se trouve pas au bon endroit (essaye en mettant un chemin absolu).
Tu aurais pu au moins joindre la ligne en défaut, on aurait peut-être eu une autre idée.
Si tu n'as pas le résultat escompté, 3 solutions:
1) le mode d'ouverture choisi n'est pas correct,
2) tu n'as pas les droits corrects sur le fichier,
3) le fichier ne se trouve pas au bon endroit (essaye en mettant un chemin absolu).
Tu aurais pu au moins joindre la ligne en défaut, on aurait peut-être eu une autre idée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
16 févr. 2009 à 17:23
16 févr. 2009 à 17:23
j'ai créé le fichier tests.txt avec le bloc notes donc ça doit pas etre les droits, j'ai essayé r et r+, j'ai essayé avec le chemin absolu ...
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
16 févr. 2009 à 17:26
16 févr. 2009 à 17:26
oui je sais mais j'ai corrigé dans mon code et ça n'a tjr pas marché
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 févr. 2009 à 17:30
16 févr. 2009 à 17:30
essaye le chemin absolu
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
16 févr. 2009 à 17:32
16 févr. 2009 à 17:32
le chemin absolu ne marche pas non plus ...
Par contre j'ai peut etre une piste : mon IDE n'est pas dans progammes files mais dans mon dossier, mes programmes créés ne sont pas dans"objets" ça pourrait etre ça ?
Par contre j'ai peut etre une piste : mon IDE n'est pas dans progammes files mais dans mon dossier, mes programmes créés ne sont pas dans"objets" ça pourrait etre ça ?
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
18 févr. 2009 à 11:18
18 févr. 2009 à 11:18
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r");
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
18 févr. 2009 à 11:47
18 févr. 2009 à 11:47
slt !
affiche le code on verra ce sui va pas !
affiche le code on verra ce sui va pas !
HACKER 712
Messages postés
1282
Date d'inscription
lundi 15 décembre 2008
Statut
Contributeur
Dernière intervention
10 décembre 2009
255
18 févr. 2009 à 12:23
18 févr. 2009 à 12:23
Ah dsl il y a du avoir une erreur sur la page...
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
18 févr. 2009 à 11:51
18 févr. 2009 à 11:51
slt
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
et ça me fait reussi mais le fichier n'est pas ouvert:!
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
et ça me fait reussi mais le fichier n'est pas ouvert:!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 févr. 2009 à 12:00
18 févr. 2009 à 12:00
Si ça t'affiche réussi, c'est qu'il est ouvert. Ouvert au sens programmation ne signifie pas que notepad ou autre va se lancer, mais que flux pointera bien sur le fichier. Et donc tu es prêt à lire le fichier avec des fgets ou autre.
Cdlt
Cdlt
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 févr. 2009 à 12:46
18 févr. 2009 à 12:46
Tout ce temps pour résoudre un non-problème. Comme quoi, il faut toujours être précis dans la description des problèmes.
juste pour afficher, ajoute cette boucle après reussi :
char buffer[512];
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
ne pas oublier de fermer le fichier à la fin, c'est plus propre.
juste pour afficher, ajoute cette boucle après reussi :
char buffer[512];
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
ne pas oublier de fermer le fichier à la fin, c'est plus propre.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 févr. 2009 à 13:27
18 févr. 2009 à 13:27
Salut,
printf(buffer);
Vaut mieux :
printf(buffer);
Vaut mieux :
printf("%s",buffer);;)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
18 févr. 2009 à 14:20
18 févr. 2009 à 14:20
qu'est ce que ça change ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
18 févr. 2009 à 15:17
18 févr. 2009 à 15:17
Cela rend possible la faille String.
Lorsque tu fais printf(buffer), si buffer contient des %x, tu vas faire afficher le code hexa des données de la pile en la descendant. Et en utilisant %x et %n astucieusement tu vas pouvoir modifier l'adresse de retour et donc pourquoi pas exécuter un shellcode.
Le printf("%s",buffer); rend impossible cette attaque.
Lorsque tu fais printf(buffer), si buffer contient des %x, tu vas faire afficher le code hexa des données de la pile en la descendant. Et en utilisant %x et %n astucieusement tu vas pouvoir modifier l'adresse de retour et donc pourquoi pas exécuter un shellcode.
Le printf("%s",buffer); rend impossible cette attaque.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
18 févr. 2009 à 16:31
18 févr. 2009 à 16:31
Merci !C'est bon à sovoir
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 févr. 2009 à 13:28
18 févr. 2009 à 13:28
Si tu veux lire dans un fichier, tu peux aussi utiliser fgets (plus sécurisé) :
char buffer[512]; while(fgets(buffer,sizeof buffer,fp)!=NULL) printf("%s",buffer); fflush(stdout); fclose(fichier),fichier=NULL;
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
18 févr. 2009 à 18:07
18 févr. 2009 à 18:07
comme ça ?
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
char buffer[512];
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\moi\\Bureau\\dossier antoine\\1nf0rm4t1k\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
char buffer[512];
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\moi\\Bureau\\dossier antoine\\1nf0rm4t1k\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 févr. 2009 à 18:43
18 févr. 2009 à 18:43
Salut,
Plutôt comme ça :
Plutôt comme ça :
#include <stdio.h> #include <stdlib.h> #include "test.h" int main(int argc, char *argv[]) { FILE* fichier = fopen("C:\\Documents and Settings\\moi\\Bureau\\dossier antoine\\1nf0rm4t1k\\programmation\\tests\Debug\\tests.txt", "r+"); if(fichier != NULL) { char buffer[512]; printf("reussi"); while(fgets(buffer,sizeof buffer,fichier)!=NULL) { printf("%s",buffer); } fclose(fichier),fichier=NULL; } else { printf("echoue"); } system("pause"); return 0; }
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
18 févr. 2009 à 18:47
18 févr. 2009 à 18:47
ok mais la ça me fait echoueappuyez sur une touche pour continuer ... :(
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 févr. 2009 à 20:44
18 févr. 2009 à 20:44
Si ça fait échouer c'est que ton pointeur fichier vaut NULL. Donc c'est à cause de fopen.
Vérifie bien le chemin.
Vérifie bien le chemin.
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
19 févr. 2009 à 19:22
19 févr. 2009 à 19:22
non en fait il manquait un antislash! maintenant il y a une nette amelioration : reussiappuyez sur une touche ... :/
mais fopen permet d'ouvrir un fichier ? de le voir comme si je l'ouvrais normalement ?
mais fopen permet d'ouvrir un fichier ? de le voir comme si je l'ouvrais normalement ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
19 févr. 2009 à 19:31
19 févr. 2009 à 19:31
Non. Fopen te permet juste de d'initialiser le pointeur FILE* pour qu'il pointe sur le fichier. Ainsi tu pourras lire le fichier avec des fgets en passant en paramètre le descripteur.
Cela n'a rien avoir avec le fait de double cliquer sur un fichier en mode graphique sur ton OS.
Cela n'a rien avoir avec le fait de double cliquer sur un fichier en mode graphique sur ton OS.
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
19 févr. 2009 à 21:10
19 févr. 2009 à 21:10
ah ... merci bcp en fait y'avait pas de probleme ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
19 févr. 2009 à 21:18
19 févr. 2009 à 21:18
Non, c'est ce que Char Snipeur t'a dit dans son message 17. Et dans mon message 15 je t'avais déjà expliqué le sens d'open en sens programmation.
accroauC
Messages postés
82
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
3 avril 2010
10
19 févr. 2009 à 21:19
19 févr. 2009 à 21:19
merci de vos reponses j'avait rien compris