2016-02-29 19 views
-2

我目前正在創建一個加密/解密應用程序作爲練習,並且要這樣做,我一直試圖使用snprintf將整數轉換爲char數組,但是,例如,如果我有4位數字的整數,它只會增加第一3.這是我到目前爲止的代碼:c - 字符數組不打印每個值

int encrypt(int num, bool type) 
{ 
    char buffer[sizeof(num)]; 
    snprintf(buffer, sizeof(buffer), "%d", num); 
    printf(buffer); 
    return 0; 
} 

任何幫助將是真棒!

+2

'字符緩衝區[的snprintf(NULL, 0,「%d」,num)+1];' – BLUEPIXY

+0

請閱讀'sizeof'運算符的操作。 – Olaf

+0

snprintf只會將sizeof(buffer)-1個字符寫入緩衝區,因爲它需要爲空終止符留出空間。 – bruceg

回答

1

緩衝區應該有足夠大的尺寸來容納轉換的數字加上最後的'\0'和潛在的減號。 sizeof(num)int變量的字節數,很可能是4,對於轉換大於999的數字還不夠,但snprintf將不會寫入超過緩衝區的大小,包括最終的'\0',因此僅包含前3位數。

您可以做一個假設上的int大小和定義buffer爲:

char buffer[12]; /* large enough for -2147483648 */ 

或者你可以精確和可移植做到這一點:

char buffer[sizeof(num) * CHAR_BIT/3 + 3]; 
+0

我懷疑OP在這裏需要sizeof(num),因爲該值與num的值無關。如果這真的是他想要的,他應該使用'sizeof int' – FredK

+0

@FredK:我不同意:使用'sizeof(num)'是可取的,因爲它的工作原理與實際的整數類型無關,後者可能會更改爲'長「或」長「。當類型在一個地方而不是其他地方更改時,複製類型是錯誤的常見原因。 – chqrlie