|
|
  |
mega32l, Врагу такого не пожелаю !!! |
|
|
|
Apr 17 2007, 21:12
|
Частый гость
 
Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868

|
Цитата(WHALE @ Apr 17 2007, 07:24)  2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем. Как правило: #define NULL ((void *)0) И к ASCII коду отношения особого не имеет, а обозначает указатель, "не указывающий ни на что". А то что в символах - называется нулевым символом, и равно совершенно обычному нулю, хотя может быть записано и по модному, типа такого: '\0' или '\x00'. Но '\0' == 0 всегда.
|
|
|
|
|
Apr 18 2007, 12:00
|
Участник

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675

|
Я написал простинькую програмку ,камень оказался целым , программатор значит тоже. Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии и на них можно расчитывать а тут ... Как лучше описать подобную функцию я раньше к примеру делал так в числе 0x34 , обнулял 3 и делал сравнение на четверку , затем делал битовый сдвиг вправо ни четыре позиции ,и опять сравнение. А какой механизм можно сделать попрощще?
|
|
|
|
|
Apr 18 2007, 12:52
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Чип-Хрум @ Apr 18 2007, 13:00)  Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии и на них можно расчитывать а тут ... Функция sprintf рабочая. Для общего развития попробуйте поргнать через симулятор програмку и обьяснить результат. Код #include <stdio.h>
signed char dat0 = 0xFF; unsigned char dat1 = 0xFF;
char buffer0[10],buffer1[10];
int main(void) { sprintf(buffer0,"%02x",dat0); sprintf(buffer1,"%02x",dat1);
for (;;); } Анатолий.
|
|
|
|
|
Apr 19 2007, 11:40
|

Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544

|
Цитата В Си NULL определен как ((void*)0) и используется как значение указателя, который никуда не указывает. Т.е. это не интегральная константа, а указатель. А вот так NULL определен в библиотеке stdio.h от EWAVR #ifndef NULL #define NULL (0) #endif это как расценить?
|
|
|
|
|
Apr 19 2007, 14:30
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(WHALE) Я считаю неприличным не сделав ни малейшей попытки что-либо "асилить" самостоятельно выходить на форум с вопросами,излагаемых в куче литературы. Ваше предыдущее сообщение Цитата(WHALE) А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила? формулируется гораздо короче - RTFM!  Поэтому без указания раздела FM это выглядит неубедительно  C другой стороны я был бы сильно удивлен, если бы за мое сообщение со ссылкой на K&R мне вынесли бы предупреждение.
|
|
|
|
|
Apr 19 2007, 15:17
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Igor26 @ Apr 19 2007, 15:40)  А вот так NULL определен в библиотеке stdio.h от EWAVR
#ifndef NULL #define NULL (0) #endif
это как расценить? Наверное, как самодеятельность (если там не применен какой-нить хитрый финт ушами). Цитата ISO/IEC 9899:1999 (E)
7.17 Commonde?nitions<stddef.h> ...
3 The macros are NULL which expands to an implementation-defined null pointer constant; ... Для чего им в stdio потребовалось этот макрос переоределлять к нулю, не понятно. Был бы это С++, было бы понятно, но в С... Не знаю.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 19 2007, 19:24
|
Участник

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675

|
Ув. WHALE выяснять отношения иди на другой форум твои замечания не по теме. Дело в том что функция sprintf переводит любое шестнадцатеричное число в массив в виде кода( это удобно для жк индикации для отображения переменных в десятичном представлении ). Из-за этого я ее и использовал , как сделать что-то подобное я не знаю, Подскажите кто силен ,хотя-бы дайте наброски ! Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм.
|
|
|
|
|
Apr 19 2007, 20:13
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Чип-Хрум @ Apr 19 2007, 19:24)  ...Из-за этого я ее и использовал , как сделать что-то подобное я не знаю, Подскажите кто силен ,хотя-бы дайте наброски ! Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм. Вам же уже указали - нужно увеличить размер буфера для sprintf. Пробовали? вариант второй - табличное преобразование char tab[16]={'0', ..'9','A'..'F'}; char byte_to_display; //вывод display(tab[byte_to_display>>4]); display(tab[byte_to_display&0x0f]);
--------------------
Уходя, оставьте свет...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|