Почему я вкладываю это предупреждение “если (fd=fopen (имя файла”, r “) == ПУСТОЙ УКАЗАТЕЛЬ)”?

FILE *fd;
if (fd=fopen(fileName,"r") == NULL)
{   
    printf("File failed to open");
    exit(1);
}

Это - фрагмент кода. Когда я компилирую его с gcc, я получаю соблюдающее предупреждение:-

warning: assignment makes pointer from integer without a cast

Когда я поместил fd=fopen (argv[2], "r") в скобках, проблема решена..

Я не могу понять, где я преобразовываю целое число в указатель, когда скобки не помещаются.

5
задан Abhijeet Rastogi 22 January 2010 в 14:05
поделиться

6 ответов

Из-за правил приоритета оператора. Условие интерпретируется как FD = (FOPEN (имя файла, «R») == NULL) Отказ Результат == является целым числом, FD является указателем, таким образом, сообщение об ошибке.

Рассмотрим «расширенную» версию вашего кода:

FILE *fd;
int ok;
fd = fopen(fileName, "r");
ok = fd == NULL;
// ...

, вы ожидаете, что последняя строка будет интерпретировать как (OK = FD) == NULL , или OK = (FD = = Null) ?

14
ответ дан 18 December 2019 в 07:54
поделиться

Приоритет оператора равенства выше, чем оператор назначения. Просто измените свой код:

FILE *fd;
if ((fd=fopen(fileName,"r")) == NULL)
{   
    printf("File failed to open");
    exit(1);
}
3
ответ дан 18 December 2019 в 07:54
поделиться

== имеет более высокий приоритет, чем = , поэтому он сравнивает результат Fopen () - NULL , затем присваивает, чтобы FD .

2
ответ дан 18 December 2019 в 07:54
поделиться

Вам нужен скобки вокруг задания:

if ((fd=fopen(fileName,"r")) == NULL)
....
1
ответ дан 18 December 2019 в 07:54
поделиться

Модуль подпроцесса должен предоставить то, что вы хотите, если вы кормите подпроцесс путь к браузеру. Обратите внимание, что вам нужен Python 2.4 или более позднее, чтобы использовать подпроцесс, но это распространено в наши дни.

Обновить - код для метода для вызова Chrome, при открытии A, прошедший в URL:

def startChrome(url):
    """ Calls Chrome, opening the URL contained in the url parameter. """
    executable = 'path-to-chrome'    # Change to fit your system
    cmd = ' '.join([executable, url])
    browswer_proc = subprocess.Popen(cmd, shell=True)
-121--5044714-

== имеет более высокий приоритет, чем =.

1
ответ дан 18 December 2019 в 07:54
поделиться

Вы сделали следующее?

#include <stdio.h>

Без этого компилятор предполагает, что все функции возвращают int .

-1
ответ дан 18 December 2019 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: