J'essaie actuellement de faire mon propre shell, et il doit être polyglotte. J'ai donc essayé d'implémenter une fonction qui lit les lignes dans un fichier .txt.Erreur: le format '% s' attend l'argument de type 'char *', mais l'argument 2 a le type 'int' [-Wformat =]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// globals
char lang[16] = {'t','r','y'};
char aMsg[512];
// functions
void takeFile() {
int i =0;
char namFil[32];
char lg[16];
FILE * file;
char tmp[255];
char * line = tmp;
size_t len = 0;
ssize_t read;
strcpy(namFil,"/media/sf_Projet_C/");
strcpy(lg,lang);
strcat(lg, ".txt");
strcat(namFil, lg);
file = fopen(namFil, "r");
printf("%s\n", namFil);
while((read = getline(&line,&len, file)) != -1) {
aMsg[i] = *line;
i++;
}
}
enum nMsg {HI, QUIT};
int main(void) {
takeFile();
printf("%s\n%s\n", aMsg[HI], aMsg[QUIT]);
}
Je suis sur win7 mais je compile avec gcc sur une machine virtuelle.
J'ai un avertissement en disant:
format'%s' expects argument of type 'char *', but argument 2 (and 3) has type 'int' [-Wformat=]
J'ai essayé d'exécuter le prog avec% d au lieu de% s et imprime des chiffres.
Je ne comprends pas ce qui convertit mon aMsg en int.
Mon fichier try.txt est juste:
Hi
Quit
'printf ("% s \ n% s \ n", amsg [HI], amsg [QUITTER])' - -> 'printf ("% s \ n% s \ n ", & aMsg [HI], & aMsg [QUIT])' BTW Je ne sais pas si cette instruction fait ce que vous voulez. – LPs
'printf ("% s \ n% s \ n ", aMsg [HI], aMsg [QUIT]);' n'a pas l'air correct. Peut-être que vous voulez 'printf ("% s \ n% s \ n ", & aMsg [HI], & aMsg [QUIT]);'? Et ne libérez pas (ligne), car vous ne l'avez pas «mallocé». –
@Cool Guy Maintenant, il imprime moi HQ et Q ... mais pas d'erreur de compilation;) –