[英]c programming print ascii value of char*
我想打印的ASCII值(ASCII INT号) char*
例如A
65上的ASCII表 。
这是我的代码。
#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]
收到此消息。
警告:从指针转换为不同大小的整数
如果我将argv[i]
为(int *)
, argv[i]
收到此消息。
警告:格式'%d'期望类型为'int',但是参数3的类型为'int *'
printf("i is %d argv[i] %d\n", i, argv[i]);
是造成线路问题的原因。 使用错误的格式说明符是C中未定义的行为 。
argv
类型为char**
但是%d
格式说明符期望int
。 因此,要打印参数的ascii值,您需要在argv
嵌套一个循环。
for(j=1;j<argc; j++) {
for(i=0;argv[j][i];i++) {
printf("i is %d argv[i] %d\n", j, argv[j][i]);
}
}
请注意您的循环条件不正确。 每个参数只能有strlen(argv[j])
字符。 因此,您不能随意打印100
字符。
移动这些printf语句
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]);
在参数检查下方,以便您仅在参数检查后打印它们。 否则,如果传递的参数较少,则最终可能会访问不存在的参数。
要点1:在检查argc > n
之前,请勿直接使用argv[n]
。 这也包括未经检查的循环,例如
for(i = 1; i < 100; i++)
i
等于argc
后,您最终将访问无效的内存。
点2:默认情况下, argv[n]
是一个以空值终止的数组或字符串 (对于有效情况)。 您需要%s
格式说明符才能打印出来。
也就是说,在程序内部,作为a.out
的第一个参数的命令行A
在argv[1]
表示为"A"
。 它不再是一个char
,它是一个字符串 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.