«Указатель из целого числа без приведения» предупреждение при открытии файла. - PullRequest
1 голос
/ 29 марта 2012

У меня есть домашнее задание, которое я делаю на C. Я новичок, так что, вероятно, это очень легко, но в любом случае у меня есть проблема с ним.

int main(int argc, char* argv){

    int fd=open(argv[1], O_RDONLY);
    int fileLength=(int)lseek(fd,0,SEEK_END);
    lseek(fd,0,SEEK_SET);
    char buf[fileLength];
    read(fd,buf,fileLength);
    int i=0;
    for(i=0; i<fileLength; i++){
        printf("%c",buf[i]);
    }
    printf("\n");
}

Я получаю эту ошибку:

warning: passing argument 1 of ‘open’ makes pointer from integer without a cast

Если я пишу "file" вместо argv[1], все в порядке.

Ответы [ 7 ]

4 голосов
/ 29 марта 2012
int main(int argc, char* argv){

должно быть:

int main(int argc, char *argv[])

Обнаружили ошибку?

1 голос
/ 29 марта 2012

Правильная подпись

int main(int argc, char **argv)
1 голос
/ 29 марта 2012

char* argv должно быть char* argv[]

То, что вы сделали, объявили argv как char*, а затем argv[1] становится символом (целым числом) вместо char *

0 голосов
/ 29 марта 2012

Ваша подпись main неверна.

Она должна выглядеть так:

0 голосов
/ 29 марта 2012

argv должно быть char **, а не char *, также вы должны запустить программу как

./program filename

0 голосов
/ 29 марта 2012

Ваша проблема в объявлении main(), которое должно быть:

int main(int argc, char *argv[])

Вы определили argv как char *, что делает его единственным указателем, тогда как это массив char * указатель, с каждым char * элементом, соответствующим аргументу командной строки вашей программы.

Ошибка, которую вы получаете, вызвана тем, что при передаче argv[1] в open(), argv[1]является единственным char, в то время как open() ожидает char *.

Еще одним улучшением вашей программы будет проверка argc > 1 перед попыткой использования argv[1].Это приведет к случаям, когда вы не передадите аргументы в вашу программу.

0 голосов
/ 29 марта 2012

Попробуйте этот помощник:

main () {
    FILE *fin  = fopen ("test.in", "r");
    FILE *fout = fopen ("test.out", "w");
    int a, b;
    fscanf (fin, "%d %d", &a, &b);  /* two input integers */
    fprintf (fout, "%d\n", a+b);
    exit (0);
}

вместо "test.in" поставьте свой аргумент, вы пытались сначала выполнить приведение раньше?

...