В настоящее время я пытаюсь выполнить свою собственную оболочку, и она должна быть полиглотой. Итак, я попытался реализовать функцию, которая читает строки в TXT-файле.Ошибка: формат '% s' ожидает аргумент типа 'char *', но аргумент 2 имеет тип '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]);
}
Я нахожусь на win7, но скомпилирую с gcc на виртуальной машине.
У меня есть предупреждение поговорка:
format'%s' expects argument of type 'char *', but argument 2 (and 3) has type 'int' [-Wformat=]
Я попытался выполнить прогу с% г вместо% с и печатают номера.
Я не понимаю, что превращает мой aMsg в int.
Мой файл try.txt просто:
Hi
Quit
'Е ("% s \ п% s \ п", АМСГ [HI], АМСГ [ВЫЙТИ])' - -> 'printf ("% s \ n% s \ n ", & aMsg [HI], & aMsg [QUIT])' BTW Я не знаю, делает ли эта инструкция то, что вы хотите. – LPs
'printf ("% s \ n% s \ n ", aMsg [HI], aMsg [QUIT]);' не выглядит правильным. Возможно, вы хотите 'printf («% s \ n% s \ n », & aMsg [HI], & aMsg [QUIT]);'? И не 'free (line);' поскольку вы не 'malloc'ed его. –
@Cool Guy Теперь он печатает меня HQ и Q ... но ошибки компиляции;) –