2013-11-26 128 views
0

我想打印出一個內存地址向後像在一個小endian機,但由於某種原因,我的程序是在我的程序中輸出兩個字符數組。c打印太多字符

char address[8]; 
char result[16]; 
scanf("%s", address); 
int x = 1; 
for(x; x<5; x++) 
{ 
int y = 4*x; 
int z = 8 - 2*x; 
result[y-4] = '\\'; 
result[y-3] = 'x'; 
result[y-2] = address[z]; 
result[y-1] = address[z+1]; 
} 
printf("%s", result); 

例如,如果我輸入「12345678」它輸出"\x78\x56\x34\x1212345678" 我想"\x78\x56\x34\x12",但我不明白,爲什麼還印了"12345678"

+2

[''\ 0''](http://en.wikipedia.org/wiki/Null_character)在哪裏? – Maroun

+0

我建議你閱讀更多關於C語言中的字符串以及它們是如何工作的。 –

回答

5

您忘記終止字符串。事實上,你的陣列對於終結者來說很小,你需要它是17個字符,然後是result[16] = '\0';


哦,你在你的代碼有一個徹頭徹尾的結合誤差爲好,因爲如果你輸入8個字符的輸入,然後scanf會寫9個字符的8字符數組。

+0

'for(x; x <5; x ++)'是否按預期工作? – Maroun

+0

@MarounMaroun在循環之前'x'被初始化爲'1',我不明白爲什麼它不起作用。 –

+1

哦...不知何故,我設法沒有看到初始化。 – Maroun

0
%s // 

在C%s需要一個指向字符串,不像%d或%C(這些期待與整數或字符變量),所以你的指針必須是NULL終止,所以該程序在內存中知道它在哪裏必須停止打印,否則你正在打印內存中的隨機內容