我正在尝试向后打印一个内存地址,就像在一个小端机器中一样,但由于某种原因,我的程序在我的程序中输出两个char数组。
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"
。
答案 0 :(得分:5)
你忘了终止字符串。实际上,你的数组对于终结符来说是小的,你需要它是17个字符,然后做result[16] = '\0';
。
哦,你的代码中也有一个越界错误,好像输入8个字符,然后scanf
将9个字符写入8个字符的数组。
答案 1 :(得分:0)
%s //
在C%s中需要一个指向字符串的指针,与%d或%c不同(这些指向具有整数或字符的变量),因此指针必须以空值终止,因此程序知道它必须在内存中停止打印,或者你在内存中随机打印