2015-06-15 1 views
0

Я даже не знаю, что происходит, я только что начал новый проект и установил базовую кошку просто чтобы убедиться, что все работает, и это произошло.предупреждение: формат '% s' ожидает аргумент типа 'char *', но аргумент 2 имеет тип 'int', используя argv

#include "stdlib.h" 
#include "stdio.h" 

int main(int argc, char *argv) { 
    printf("%s",argv[0]); 
    return 0; 
} 

Вот и все, я переустановил gcc, g ++ и оба multilibs. Я действительно понятия не имею, что даже думать.

+4

Это должен быть char ** argv, это массив строк, а не одна строка. –

+5

'char * argv' typo как' char ** argv' – BLUEPIXY

+0

@ EricRenouf; Его не массив строки. Его указатель на указатель на 'char'. – haccks

ответ

7

Неверный тип argv. Подпись main должен быть один из:

int main(int argc, char **argv); 
int main(int argc, char *argv[]); // Functionally equivalent to above 

Обратите внимание, что main может также принимать void игнорировать параметры, но это не то, что вы ищете здесь.

Я лично предпочитаю второй формы, перечисленные выше, я считаю его более понятным (массив char*) против первого (указатель на char*), но так как массивы просто арифметика указателей в C, либо будет делать.

+1

Я должен быть пьян или что-то подобное, ты прав. Благодарю. –

5

Второй аргумент функции main обычно определяется как char **argv или как char *argv[]; оба пути правильны.

И прилагаемые предложения также неверны. С #include "file.h" он будет следить за file.h в текущей папке, но если вы включаете файл заголовка из стандартной библиотеки C, он должен быть #include <file.h>.

+2

Обозначение '#include" stdio.h "обычно работает нормально, но вы правы, что стандарт использует' #include ', и вы тоже должны это делать, если нет особых причин для этого. –