[英]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.