#include<stdio.h>
void main()
{
FILE *fp,*fp1;
char c;
fp=fopen("test.txt","r");
fp1=fopen("test1.txt","w");
c=getc(fp);
while(c!=EOF)
{
if (c=="")
{
c=getc(fp);
continue;
}
else
fprintf(fp1,"%s",c);
c=getc(fp);
}
fclose(fp);
fclose(fp1);
}
Répondre
Parce que le caractère n'est pas une chaîne.
Essayez fputc. BTW: Le c devrait être int, sinon vous ne serez pas en mesure de détecter EOF. EOF> 255.
Nitpick: EOF est habituellement (mais ne doit pas être) moins de 0. –
c==""
aussi ne fonctionnera pas comme vous le pensez.
Votre problème est le fprintf ("% s") de la variable c. c n'est pas une chaîne, c'est un caractère unique. Remplacez cette ligne par
fprintf(fp1,"%c",c);
Et cela fonctionnera. Il existe de meilleurs moyens de copier le contenu d'un fichier dans un autre.
de meilleures façons comme? – Hick
Eh bien, la meilleure façon serait "cp". Mais je suppose que c'est un exercice ou que vous essayez de faire quelque chose de plus intéressant, comme filtrer le contenu pendant la copie. Le plus gros problème avec l'approche ci-dessus est la lecture d'un personnage à la fois est très lent. Au minimum, vous voulez lire et écrire les fichiers un morceau à la fois via read()/write() ou fread()/fwrite() ou similaire avec une taille de bloc d'environ 16k. – Nelson
ouais je dépouille tous les espaces blancs .. en développant un lexer. donc à partir de maintenant, il ne fonctionne pas avec cette méthode – Hick
Il y a un certain nombre de problèmes avec le code qui pourraient causer des problèmes.
fp
et fp1
doit être vérifié par rapport à NULL
après avoir reçu le résultat de fopen
pour vérifier les échecs d'ouverture de fichier.
Le type de c
doit être int
afin que vous puissiez distinguer correctement EOF
d'un caractère valide lu correctement.
c == ""
tente de comparer la valeur de caractère avec l'adresse d'une chaîne littérale de longueur nulle.
fprintf(fp1,"%s",c)
interprète cette valeur de caractère c comme l'adresse d'une chaîne constante et tente de suivre cette adresse pour imprimer une chaîne. C'est l'erreur la plus probable pour provoquer une erreur de segmentation.
Problèmes de style moins importants. La valeur de retour main
doit être int
. Il est portably correct même si de nombreuses implémentations permettent void main(void)
. Comme le corps de votre clause if
correspond à ce qui se passerait si la boucle courait jusqu'à la fin et est suivie par un continue
, il serait probablement plus clair de supprimer cette clause et d'appliquer une instruction if avec le contraire de ce que vous pense c==""
devrait devenir, à ce qui est actuellement l'instruction else
.
Le code donne une erreur de segmentation en raison d'un accès illégal à la mémoire, fprintf recherche un caractère nul pour se terminer et, dans ce processus, accède à un emplacement mémoire invalide.
Les pointeurs de fichiers doivent également être vérifiés pour null et le code devrait quitter normalement si l'un d'entre eux est nul, sinon il provoquera également un segfault.
- 1. Pourquoi ai-je une erreur de segmentation avec ce code?
- 2. Ruby moniteur erreur de segmentation
- 3. Pourquoi ai-je une erreur isEqualToString dans ce code Cocoa?
- 4. Pourquoi ai-je une erreur de segmentation (core dumped) lorsque j'essaie d'allouer une matrice 4D?
- 5. Erreur de segmentation JNI bug
- 6. Erreur de segmentation d'une caméra avec MATLAB
- 7. erreur de segmentation en utilisant OMP
- 8. Erreur de segmentation dans QAbstractItemModel personnalisé
- 9. OCaml: Pourquoi ce code produit-il une erreur de vérification de type?
- 10. Erreur de segmentation de lancement de script php osx
- 11. Pourquoi ce code C buggé?
- 12. erreur de segmentation sur Unix - corruption de pile possible
- 13. Défaut de segmentation et de segmentation
- 14. L'ajout d'un membre int à une structure C provoque une erreur de segmentation
- 15. Pourquoi ce VBScript me fait-il une erreur?
- 16. Pourquoi est-ce que je reçois une "erreur T_STRING inattendue"
- 17. Pourquoi ce callback setTimeout me fait-il une erreur?
- 18. TokyoCabinet: Erreur de segmentation à hdb-> close()
- 19. Pourquoi mon code rencontre une erreur d'exécution NZEC?
- 20. Segmentation fault - pointeur omble
- 21. Pourquoi ne puis-je pas exécuter ce code? Pourquoi ne puis-je pas exécuter ce code?
- 22. Pourquoi ce code groovy lance-t-il une MultipleCompilationErrorsException?
- 23. Pourquoi ce code ne fonctionne pas?
- 24. Comment puis-je retrouver une erreur de segmentation dans une application Cocoa?
- 25. Pourquoi est-ce que j'obtiens une exception de pointeur nul à partir de ce code Java?
- 26. Est-ce une erreur?
- 27. C#: Pourquoi ce code est-il ignoré?
- 28. pourquoi ce code ne fonctionne pas?
- 29. Pourquoi est-ce que je reçois une exception IllegalArgumentException avec ce code pour créer une image?
- 30. Problème lors de la recherche de la source de mon erreur de segmentation
Vous avez déjà des réponses à la question spécifique mais en général, avez-vous un débogueur? C'est le meilleur moyen de découvrir la cause au moins immédiate d'une faute de segmentation particulière. – quark
Vous devriez prendre l'habitude de bons noms de variables comme 'file1' &' file2' plutôt que 'fp' &' fp1'. – GManNickG