2013-11-26 8 views
0

Я пытаюсь распечатать адрес памяти в обратном порядке, как в маленькой конечной машине, но по какой-то причине моя программа выводит оба массива char в мою программу.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 или% с (они ожидают переменных с целыми числами или символами), так что ваш указатель должен быть нулем, так что программа знает, где в памяти его должны прекратить печать, или же вы печатаете случайные данные в памяти

Смежные вопросы