Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2011, 09:31   #1
Bиталий
 
Регистрация: 26.01.2011
Сообщений: 8
По умолчанию Вывод символа 0x00

У меня есть массив байт rec[3]. Мне нужно разбить его на отдельные числа. Почему если один из элементов массива равен 0x00, то функция printf печатает его каждый раз по-разному? Причем если переместить этот элемент на предыдущие позиции, то и все последующие символы отображаются неверно.

Код:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv) 
{
char x,y,z;
char rec[3];
rec[0]=0x45;
rec[1]=0x2a;
rec[2]=0x00;
sscanf(rec, "%c %c %c", &x, &y, &z);
printf("%x %x %x \n", x,y,z);
return (EXIT_SUCCESS);
}
Вот результаты выполнения программы при трех запусках
1) 45 2a fffffffc
2) 45 2a c
3) 45 2a 6d

Последний раз редактировалось Bиталий; 15.09.2011 в 09:39.
Bиталий вне форума Ответить с цитированием
Старый 15.09.2011, 10:17   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

и че вы хотите, у вас в строкке два символа, 0 - символ завершения строки, поэтому значение z соответсвует мусору, которым оно иницилизированно. инициализируйте z единицей, к примеру, и увидьте разницу.
f.hump вне форума Ответить с цитированием
Старый 15.09.2011, 10:43   #3
Bиталий
 
Регистрация: 26.01.2011
Сообщений: 8
По умолчанию

А что делать если мне будут приходить такие данные, в которых будут нули? Как их запоминать, если нельзя записывать в массив char?
Bиталий вне форума Ответить с цитированием
Старый 15.09.2011, 11:02   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
если нельзя записывать в массив char?
Записывать можно. Выводить строковыми функциями без преобразования нельзя.

Выводите в хексе.
p51x вне форума Ответить с цитированием
Старый 15.09.2011, 18:46   #5
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Bиталий Посмотреть сообщение
А что делать если мне будут приходить такие данные, в которых будут нули? Как их запоминать, если нельзя записывать в массив char?
Вам просто следует отказаться от функции sscanf и использовать непосредственное присвоение. Например,


Код:
x = rec[0];
y = rec[1];
z = rec[2];
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение символа: Skripnichenko Общие вопросы C/C++ 0 24.03.2011 22:06
Значение символа? bhgbx Помощь студентам 1 21.03.2011 16:12
код символа Serg12 Помощь студентам 5 08.03.2010 15:34
вывод символа skymaster Общие вопросы Delphi 3 04.06.2009 17:31
шифрование символа TRISTAR Общие вопросы C/C++ 2 08.06.2008 01:35