【发布时间】:2015-06-24 16:02:02
【问题描述】:
我正在尝试将char* 例如A 的ascii 值(ascii int 数字)打印为ascii table 上的65。
这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int i = 0;
printf(" Hello World \n");
printf("argv[0] is %s! \n",argv[0]);
printf("argv[1] is %s! \n",argv[1]);
printf("argv[2] is %s! \n",argv[2]);
printf("argv[3] is %s! \n",argv[3]);
if( argc == 4 )
{
printf("The first argument supplied is %s\n", argv[1]);
printf("The second argument supplied is %s\n", argv[2]);
printf("The third argument supplied is %s\n", argv[3]);
}
else if( argc > 4 )
{
printf("Too many arguments supplied.\n");
exit( 1 );
}
else
{
printf("Not enough arguments supplied. \n");
exit( 1 );
}
for(i = 1; i < 100; i++)
{
printf("i is %d argv[i] %d\n", i, argv[i]);
}
return(0);
}
我希望从命令中输入这些值,所以这就是我输入的内容。
./a.out A B C
当我编译它时,我得到了这个警告。
警告:格式“%d”需要类型“int”,但参数 3 的类型为“char *”
如果我将argv[i] 转换为(int),我会收到此消息。
警告:将指针转换为不同大小的整数
如果我将argv[i] 转换为(int *),我会收到此消息。
警告:格式“%d”需要类型“int”,但参数 3 的类型为“int *”
【问题讨论】:
-
如果
argv[i]有效,(int) *argv[i]应该可以正常工作(argv是char *的数组,所以*argv[i]取消引用argv[i]处的指针,有效地转换第一个char 转换为 int(在 C 中是合法的)。char始终小于 int,因此可以提升为int
标签: c pointers char compiler-warnings command-line-arguments