簡體   English   中英

c編程char的打印ascii值*

[英]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的第一個參數的命令行Aargv[1]表示為"A" 它不再是一個char ,它是一個字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM