2015-02-03 2 views
0

Мне предоставлена ​​функция statPrint для обработки системного вызова stat(). Функция предоставляется с другим файлом .o. Я получаю ошибки при компиляции моей реализации с этой функцией:Как обрабатывать заданную функцию extern в C

In function ‘main’: 
statcall.c:9:19: error: expected expression before ‘,’ token 
statPrint(argv[1]*,sb*); 
      ^
statcall.c:9:19: error: incompatible type for argument 2 of ‘statPrint’ 
statcall.c:4:8: note: expected ‘struct stat *’ but argument is of type ‘struct stat’ 
extern statPrint(char*,struct stat*); 

Вот мой код:

#include <stdio.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
extern statPrint(char∗,struct stat∗); 
int main(int argc, char *argv[]) 
{ 
    struct stat sb; 
    stat(argv[1],&sb); ///argv[1] contains input from the terminal/shell 
    statPrint(argv[1]*,sb*); 
} 

я скомпилировать его с (Libštát содержит внешнюю функцию):

gcc -o statcall statcall.c libstat.o 

Как избавиться от ошибок?

+0

В этой строке: 'extern statPrint (char *, struct stat *);' Должно ли statPrint иметь возвращаемое значение? Вероятно, 'int' или' void'? – abelenky

+0

Это '*' не совсем похоже на '*'. Это ваш фактический исходный код ??? –

+0

Не могли бы вы объяснить или привести пример? Я новичок в c и никогда раньше не видел extern. extern statPrint (char *, struct stat *) - это то, как учитель дал это нам. Я думал, что должен объявить это так, а затем использовать функцию statPrint в главном. – nelthas

ответ

1

Этой линия не имеет никакого смысла:

statPrint(argv[1]*,sb*); 

Там нет действительного синтаксиса, который заканчивается с *.


Я думаю, что вы хотите:

statPrint(argv[1], &sb); 

Рекомендуем Вам прочитать на адреса переменных и указателей.

+0

Мне нужно было обновить мой синтаксис c, с ним тоже не привык. Он работал после исправления всего синтаксиса. – nelthas

1

Ваша функция ожидает char * пожалуйста, предоставьте это

statPrint(argv[1],sb); 

Я действительно не понимает, что это argv[1]*

+0

Забыл упомянуть, что я даю значение (путь) от терминала/оболочки. Где вы имеете в виду, я должен предоставить символ? Не делаю этого в основном с statPrint (argv [1] *, sb *); ? – nelthas

+0

@nelthas вы можете объяснить, почему вы добавляете '*'? –

Смежные вопросы