Вопрос по поводу указателей в fscanf - PullRequest
2 голосов
/ 01 сентября 2009

Я использую C. У меня проблемы с использованием указателей для функции fscanf. Когда я пытаюсь сделать:

int *x;
/* ... */
fscanf(file, "%d", x[i]);

Мой компилятор выдает предупреждение «аргумент формата не указатель», а код просто не запускается (появляется сообщение «Water.exe перестала работать»). Если я заменю x на * x, он просто не скомпилируется ... Это просто проблема синтаксиса?

Ответы [ 2 ]

11 голосов
/ 01 сентября 2009

Если вы хотите прочитать одно целое число, сделайте это:

int x;
fscanf(file, "%d", &x );

Если вы хотите, вы можете сделать это, чтобы прочитать одно целое число в динамически распределенной переменной:

int *x = malloc(sizeof(int));
fscanf(file, "%d", x );

Если вы хотите получить массив целых чисел, сделайте следующее:

int *x = malloc(sizeof(int) * DESIRED_ARRAY_SIZE);
fscanf(file, "%d", &x[i] );

%d ожидает указатель на int, но x[i] является int, поэтому вам нужно взять адрес вашего элемента списка с помощью оператора address-of (унарный &).

8 голосов
/ 01 сентября 2009

Вам нужно выделить место для результатов.

int *x; // declares x

x = malloc( 600000 * sizeof(int) ) // and allocates space for it

for (int i = 0; i < 600000; ++i ) {
    fscanf(file, "%d", &x[i] ); // read into ith element of x
}
...