将 argv 传递给函数以填充全局变量
Pass argv to function to populate global variable
我正在尝试通过将命令行参数传递给函数来填充全局 int 变量。当我这样做时,我会收到警告(见下文)以及一个奇怪的 return 数字(例如 52 而不是预期的 49)。
如有任何提示,我们将不胜感激。这是 HW - 但只是整个作业的一小部分。
#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
把这个放在 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[])
别忘了修复原型。
我正在尝试通过将命令行参数传递给函数来填充全局 int 变量。当我这样做时,我会收到警告(见下文)以及一个奇怪的 return 数字(例如 52 而不是预期的 49)。
如有任何提示,我们将不胜感激。这是 HW - 但只是整个作业的一小部分。
#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
把这个放在 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[])
别忘了修复原型。