J'ai des problèmes avec une affectation où je dois prendre le contenu d'un fichier dans un tampon, inverser ces contenus, et les écrire dans un autre fichier. Ce programme a besoin d'utiliser deux fonctions qui ressemblent à ceci:C programme pour inverser le contenu d'un fichier et l'écrire dans un autre fichier
int read_file(char* filename, char **buffer);
int write_file(char* filename, char *buffer, int size);
jusqu'à présent mes fichiers ressembler à ceci:
file_utils.h
#ifndef UTILS_H
#define UTILS_H
int read_file(char* filename, char **buffer);
int write_file(char* filename, char *buffer, int size);
#endif
file_utils.c
#include "file_utils.h"
#include <stdlib.h>
#include <stdio.h>
#include <font1.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
int read_file(char* filename, char **buffer) {
FILE* file1;
file1 = fopen(filename, "r");
//gets the size of the file
struct stat st;
stat(filename, &st);
int size = st.st_size;
buffer = malloc(size);
read(file1, &buffer, 1);
return size;
}
int write_file(char* filename, char*buffer, int size) {
FILE* file2;
file2 = fopen(filename, 'w');
for (int k = size - 1; k >= 0; k--) {
char* x = &buffer + k;
fprintf(file2, "%s", x);
}
printf(filename, '\O');
return 1;
}
Reverse.c
#include "file_utils.h"
#include <stdlib.h>
#include <stdio.h>
#include <font1.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char* buffer;
char* filename1;
char* filename2;
int filesize;
filename1 = argv[1];
filename2 = argv[2];
filesize = read_file(filename1, &buffer);
write_file(filename2, buffer, filesize);
return 0;
}
et c'est tout ce qu'il ya. Je lance à l'aide de "clang file_utils.c Reverse.c" et je reçois des avertissements pour file_utils.c comme
incompatible integer to pointer conversion passing 'int" to parameter of type 'const char *'
(pour la ligne fichier1 = fopen (nom de fichier, 'r')incompatible pointer to integer conversion passing 'FILE *' (aka 'struct_IO_FILE*') to parameter of type 'int'
(pour la ligne de lecture (fichier_1, tampon &, 1);)- le même avertissement que le premier mais pour la ligne fichier2 = fopen (filename, 'w');
- et
incompatible pointer types initializing 'char *' with an expression of type 'char **'; dereferences with *
(pour la ligne char * x = & buffer + k;)
au-dessus de tout cela quand je continue à lancer l'exécutable en tant que telle
./a.out file1 file2
où fichier 1 a le texte qui devrait être inversée dans le fichier 2, je reçois une erreur de segmentation.
Tout aperçu des choses que je peux réparer sera très apprécié.
Votre première erreur/avertissement est que vous avez passé '' r'' quand vous avez besoin de '' r ''. Et la même chose vaut pour cette troisième balle. – Charles
Tout d'abord c'est '' r ''(pas''r''). La double citation est une * chaîne *, la citation unique est un * entier *. – pmg
Est-ce un devoir, d'ailleurs? – Charles