【发布时间】:2014-05-30 06:11:07
【问题描述】:
在我的程序中,我使用 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>
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的声明应该是:main(int argc, char *argv[]){- 警告是因为 atoi 采用char *而不是int *... 当您不包含标题时,编译器至少应该发出关于未定义函数 atoi 的警告。 -
请注意“我收到以下错误:”,后面是 警告
achesim.c:20: warning: passing argument ...?这暗示,如果没有在include文件中找到适当的原型,程序可能会编译和运行:运行是否正确。
标签: c