将argv传递给函数以填充全局变量

时间:2015-01-25 00:00:48

标签: c argv

我试图通过将命令行参数传递给函数来填充全局int变量。当我这样做时,我收到警告(见下文),以及一个时髦的返回号码(例如52而不是预期的49)。

任何提示都将不胜感激。这是硬件 - 但只是整个任务的一小部分。

#include <stdio.h> 
#include <stdlib.h>
#include "kangarooHeaders.h"


int             numJoeys                = MIN_NUM_LEGAL_JOEYS - 1;

int main (int argc, char* argv[])
{
        initializeNumJoeys(argc,argv);
        printf("%d", numJoeys);
}

void initializeNumJoeys(void argc, void *argv[])
{
        char line[LINE_LEN];
        if (argc > MAMAS_NUM_JOEYS_CMD_LINE_INDEX)
                numJoeys = *argv[1];
}

argv_test.c:13: warning: conflicting types for ‘initializeNumJoeys’
argv_test.c:9: warning: previous implicit declaration of ‘initializeNumJoeys’ was here

1 个答案:

答案 0 :(得分:3)

将其置于main()函数

之上
void initializeNumJoeys(int argc, char *argv[]);

原因是隐式函数声明,编译器没有找到initializeNumJoeys()的原型并隐式声明为

int initializeNumJoeys();

所以当它找到定义时,它就与之前的声明相冲突。

另外,请更改此

numJoeys = *argv[1];

numJoeys = strtol(argv[1], NULL, 10);

并且,函数签名错误

void initializeNumJoeys(void argc, void *argv[])
             /*           ^ should be int */

所以将其改为

void initializeNumJoeys(int argc, void *argv[])
不要忘记修复原型。