2011-11-14 103 views
0

我添加如果我打印出val一旦值已被分配它打印出的值作爲2(因爲它應該)以下我的char []Char []值沒有被打印?

int index = 0; 
char i = '5'; 
char q = '7'; 
char val = (i - '0') + (q - '0'); 
array[index] = val; 
++index; 

。但是,如果我然後打印出像我這樣的字符數組。printf("%.*s\n",index,array);沒有打印,但空的空間。這是爲什麼發生?

+0

這是怎樣的問題,如果你擴大你的代碼,一個完整的計劃,我們可以只複製和粘貼,以編譯和運行, – hugomg

+0

,這將大大受益?我使val爲0x12 - 換頁符。 –

+0

@MartinJames不是'0x12'而是十進制'12'。 –

回答

0

您正在告訴printf它是一個字符串,但值不是可打印的ASCII值。

1

您還沒有將「0」加回到您放入數組中的數字(您也沒有添加NUL終止符),因此它將被打印出來,因爲無論字符在字符集中碰巧具有值12(可能還有代碼頁)(之後是內存可能包含的任何其他內容,直到下一個恰好包含零的字節)。

在ASCII字符集(以及Unicode等派生詞)中,字符12是一個換頁字符。如果您將其送入了理解ASCII的打印機,那麼它可能會在下一頁打印之後彈出該頁面以顯示文本。然而,在屏幕上,通常沒什麼意義,所以它通常會顯示爲空白(或者可能是一些特殊字符,如笑臉或其他東西)。

0

好吧,假設你的意思是打印出12的值,這意味着你試圖在ASCII字符集中打印字符號12。該字符(http://www.asciitable.com/)是不可打印的字符。

(實際上也是字符2)。

0

您可能誤解爲數值的值,並將此值視爲可打印的字符。

例如,x的值2:

char ch = 7 - 5; 

...但CH是非打印字符2.如果你想在CH值可打印,則必須再次添加它值爲'0'。

char ch = x + '0'; 

如果值超過9,則必須使用更復雜的算法,以便將數字轉換爲字符串。

0

格式字符串"%.*s"需要兩個參數。第一個是int,用於打印的最小寬度(在您的情況下爲index(零)),第二個爲數據本身的char*

結論:通過打印零字符,程序的行爲正確。

1

每個ASCII字符都有一個整數值。打印字符時,下層系統檢查變量值char並打印相應的ASCII字符。值本身不打印。請參閱ASCII table以供參考。

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值轉換爲字符串打印的實際值。你可以用itoa()轉換。

char result = ('5' - '0') + ('7' - '0'); 
char buf[5]; 
memset(buf, 0, sizeof(buf)); 

itoa((int)result, buf, 10); 
printf("%s\n", buf);