2013-11-26 94 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终止,所以该程序在内存中知道它在哪里必须停止打印,否则你正在打印内存中的随机内容