2012-05-11 73 views
0
#include <stdio.h> 

int main(){ 
    char *c=""; 
    printf("Input: "); 
    scanf_s("%c", c); 
    printf("%x", *c); 
} 

我想輸入幾個字符,然後輸出整個字符串作爲十六進制值。我該怎麼做呢?將指針字符打印爲十六進制

回答

2

你需要一個緩衝,不是一個字符串常量,讀入。此外,請勿使用任何*scanf函數,也不要使用任何*_s函數。

編寫程序的正確方法是這樣的:

int 
main(void) 
{ 
    char line[80]; 
    char *p; 

    fputs("Input: ", stdout); 
    fgets(line, sizeof line, stdin); 

    for (p = line; *p; p++) 
    printf("%02x", *p); 

    putchar('\n'); 
    return 0; 
} 

...但我不知道你所說的「輸出整個字符串作爲十六進制值」的意思到底是什麼使這可能不是你想要什麼。

+0

一次掃描一個字符可能不是最好的方法,但它也不是無效的。 –

+0

這個工作,但無論如何要做到這一切嗎?也爲什麼是scanf不好的做法? – Painguy

+0

對不起,一次做什麼?我不明白你在問什麼。 – zwol

0

您需要一個循環來讀取多個字符並輸出它們中的每一個。您可能想要將格式更改爲%02x以確保每個字符輸出2位數字。

1

您的整個代碼都是錯誤的。它應該是這個樣子:

printf("Input: "); 

char c = fgetc(stdin); 
printf("%X", c); 
+0

您的代碼與原始代碼一樣錯誤,因爲它在單個字符後停止。 –

0
#include <stdio.h> 

int main(void) 
{ 
    unsigned int i = 0;    /* Use unsigned to avoid sign extension */ 
    while ((i = getchar()) != EOF) /* Process everything until EOF   */ 
    { 
     printf("%02X ", i); 
    } 

    printf("\n"); 

    return 0; 
} 
相關問題