C-在数组中存储main()参数

C-在数组中存储main()参数,c,main,argv,argc,C,Main,Argv,Argc,我正在使用bankers算法创建一个多线程程序,所有程序都经过硬编码和编译,但从用户输入填充初始可用数组时遇到了问题 #DEFINE NUMBER_OF_RESOURCES 3 int available[NUMER_OF_RESOURCES]; //available will be length of argc i.i number of total resoruces int main(int argc, char *argv[]) { printf("AVAILABL

我正在使用bankers算法创建一个多线程程序,所有程序都经过硬编码和编译,但从用户输入填充初始
可用
数组时遇到了问题

#DEFINE NUMBER_OF_RESOURCES 3

int available[NUMER_OF_RESOURCES];       //available will be length of argc i.i number of total resoruces

int main(int argc, char *argv[]) 
{

printf("AVAILABLE RESOURCE: \n [");
//Populate Available Resource Array
for (i = 1; i < argc; i++)
{
    available[i-1] = argv[i];
    printf("%d ", available[i]);
}
printf("] \n\n");
}

您不能使用普通赋值将字符串转换为整数(您应该得到一个编译器警告,关于在不使用强制转换的情况下将
char*
赋值给
int
)。调用
atoi()
解析整数

available[i-1] = atoi(argv[i]);

您不能使用普通赋值将字符串转换为整数(您应该得到一个编译器警告,关于在不使用强制转换的情况下将
char*
赋值给
int
)。调用
atoi()
解析整数

available[i-1] = atoi(argv[i]);
  • 使用
    atoi
    将字符串转换为
    int
  • 确保您没有访问
    可用
    超出范围
  • for(i=1;i
  • 使用
    atoi
    将字符串转换为
    int
  • 确保您没有访问
    可用
    超出范围
  • for(i=1;i
    argv
    的元素是字符串,而不是数字。使用
    %s
    而不是
    %d
    打印它们。可用
    变量的类型是什么?
    可用[i-1]=atoi(argv[i]);printf(“%d”,可用[i-1])您正在尝试将字符串指针打印为整数
    argv[]
    是指针数组。根据您给出的数字,很可能第一个参数的长度为2(大小为3),下一个参数的长度为1(大小为2)。argv
    的元素是字符串,而不是数字。使用
    %s
    而不是
    %d
    打印它们。可用
    变量的类型是什么?
    可用[i-1]=atoi(argv[i]);printf(“%d”,可用[i-1])您正在尝试将字符串指针打印为整数
    argv[]
    是指针数组。从您给出的数字来看,很可能第一个参数的长度为2(大小为3),下一个参数的长度为1(大小为2)。如果编译器使用32位指针,您可能不会收到错误,这可能是您实际想要做的。@指针的大小无关紧要,它们仍然是不同的类型。任何像样的编译器都应该警告这样的自动转换。要解析外部输入,请使用
    strtol
    而不是
    atoi
    。如果编译器使用32位指针,可能不会出现错误,而这可能正是您真正想要做的。@指针的大小无关紧要,它们仍然是不同的类型。任何像样的编译器都应该警告这样的自动转换。对于解析外部输入,请使用
    strtol
    而不是
    atoi
    。您的意思可能是
    i-1
    ?您的意思可能是
    i-1
    for (i = 1; i < argc && i < NUMER_OF_RESOURCES+1; i++)
    {
        available[i-1] = atoi(argv[i]);
        printf("%d ", available[i-1]);
    }