在我的程序中,我使用
atoi()
函数从 int
中提取一个 argv
。当我使用:
#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]);
}
}
}
}
变化:
main(int argc, int **argv){
到
int main(int argc, char *argv[]){
您之前的声明不是
main
的可接受声明,并且 atoi
需要一个 char *
类型的参数。
argv 应该是一个字符数组,你必须读取字符,然后将它们转换为 int。
另外,什么是:
if(argc == 0)
如果你没有争论?这根本不可能,因为程序名称是作为参数传递的。
参见:
您也没有在正确的范围内声明 int blk,当您离开 if(argc == 0) 语句时,变量 blk 将消失。