C语言 stdlib. h未按预期与atoi()函数配合使用

8fq7wneg  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(129)

在我的程序中,我使用atoi()函数从argv中提取int。当我用途:

#include <stdlib.h>

出现以下错误:

cachesim.c:20: warning: passing argument 1 of ‘atoi’ from incompatible pointer type

但是,如果我不包含stdlib. h,我就不会收到任何错误,我的代码也能正常运行。为什么会这样呢?

#include <stdlib.h>
#include <stdio.h>
int main(int argc, int **argv) {
    if (argc == 0){
        int blk = 32;
        int i;
        for (i = 1; i < argc; i++) {
            if (strcmp(argv[i], "-b") == 0) {
                if (i + 1 <= argc - 1)
                    blk = atoi(argv[i+1]);
            }
        }
    }
}
p3rjfoxz

p3rjfoxz1#

变更:

main(int argc, int **argv){

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

您之前的声明不是main可接受的声明,并且atoi需要char *类型的参数。

sqxo8psd

sqxo8psd2#

argv应该是一个字符数组,你必须读取字符,然后把它们转换成一个int型。
还有,什么是:

if(argc == 0)

如果你没有参数,那是不可能的,因为程序名是作为参数传递的。
参见:
What does int argc, char *argv[] mean?
你也没有在正确的范围内声明int blk,当你离开if(argc == 0)语句时,变量blk将消失。

相关问题