[英]Char[] values not being printed?
我將以下內容添加到我的char []
int index = 0;
char i = '5';
char q = '7';
char val = (i - '0') + (q - '0');
array[index] = val;
++index;
如果我在分配了值后打印出val
,則將值打印為2
(應該如此)。 但是,如果我然后打印出我的char數組,那么.. printf("%.*s\\n",index,array);
什么都不打印但是空的空間。 為什么會這樣?
你沒有將“0”添加回你放入數組的數字(也沒有添加NUL終結符),所以它被打印出來,因為字符集中的值為12
(可能是代碼頁)你正在使用(后跟內存可能包含的任何其他內容,直到下一個字節恰好包含零)。
在ASCII字符集(以及Unicode等派生詞)中,字符12是換頁符。 如果您將其送入了解懂ASCII的打印機,它可能會彈出該頁面,使其在下一頁打印后顯示。 然而,在屏幕上,通常沒有多少意義,所以它通常會顯示為空白(或者可能是一些特殊的角色,如笑臉或其他東西)。
每個ASCII字符都有一個整數值。 打印字符時,底層系統會檢查char
變量的值並打印相應的ASCII字符。 值本身不會打印。 請參閱ASCII表以供參考。
char var = '7'; // var's value is actually 55.
char other = 55; // This is same as '7'
計算兩位數字符的總和時,在你的情況'5'和'7'中,你必須從它們中減去字符'0',將'5'和'7'轉換為數字5和7。
char first = '5' - '0'; // Is actually 53 - 48 = 5
char second = '7' - '0'; // Is actually 55 - 48 = 7
char result = first + second; // 5 + 7 = 12
// When you print result, you will not see "12" printed. Instead you see a form feed special character.
char test = '5' + '7'; // 53 + 55 = 108, which is letter 'l'
您必須將char
的值轉換為string以打印實際值。 你可以用itoa()
轉換。
char result = ('5' - '0') + ('7' - '0');
char buf[5];
memset(buf, 0, sizeof(buf));
itoa((int)result, buf, 10);
printf("%s\n", buf);
您告訴printf
它是一個字符串,但值不是可打印的ASCII值。
好吧,假設你打算輸出值12
,這意味着你試圖在ASCII字符集中打印12
號字符。 該角色(http://www.asciitable.com/)是一個不可打印的角色。
(實際上同樣適用於角色2
)。
您可能誤將值誤解為數值,並將此值作為可打印字符。
例如,x的值為2:
char ch = 7 - 5;
...但是ch是不可打印的字符2.如果希望ch中的值可打印,則必須再次添加值“0”。
char ch = x + '0';
如果該值超過9,則必須使用更復雜的算法,以便將數字轉換為字符串。
格式字符串"%.*s"
需要兩個參數。 第一個是int
,用於打印的最小寬度(在您的情況下是index
(零)),第二個是char*
,用於數據本身。
結論:通過打印零個字符,程序正常運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.