簡體   English   中英

Char []值沒有打印?

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

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