Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

Ещё раз про перевод из Си на Паскаль   Найти похожие ветки 

 
Германн ©   (2007-08-26 01:46) [0]

Прошу прощения за вопрос по Си, но...
Добавляю в DLL"ку, про которую я раньше тут говорил, новые функции в соответствии с дополнениями к ТЗ, которые получил недавно. И столкнулся в ТЗ с таким вот описанием структуры на Си.
event_s struct
{
event_type type;
char datetime[18];  //строка, заканчивающаяся нулевым символом, содержащая
 //время и дату в формате "dd/mm/yy hh:mm:ss".
...


Вот и не пойму. Я думал что "char datetime[18]" аналогичен Паскалевскому типу "datetime = array 0..17 of char". Но причём тут тогда комментарий о "нулевом символе в конце"?


 
Riply ©   (2007-08-26 01:59) [1]

> [0] Германн ©   (26.08.07 01:46)
Что-то отдаленно напоминающее это встречала.
Там, признаком "незаполненности" структуры был #0 первым символом.
Может и здесь что-то похожее ?


 
ferr ©   (2007-08-26 02:03) [2]

> Вот и не пойму. Я думал что "char datetime[18]" аналогичен
> Паскалевскому типу "datetime = array 0..17 of char". Но
> причём тут тогда комментарий о "нулевом символе в конце"?

это просто массив из 18 символов. Комментарий говорит о том что в каком-то месте массива стоит нулевой символ.


 
fisher   (2007-08-26 02:04) [3]

"dd/mm/yy hh:mm:ss".
тут 17 символов плюс нулевой и того 18
чё непонятно?


 
fisher   (2007-08-26 02:05) [4]

ferr ©   (26.08.07 02:03) [2]
не в каком-то месте, а  чёрным по белому написано что в конце


 
J_f_S   (2007-08-26 02:08) [5]


> Германн ©   (26.08.07 01:46) 
> Прошу прощения за вопрос по Си, но...Добавляю в DLL"ку,
> про которую я раньше тут говорил, новые функции в соответствии
> с дополнениями к ТЗ, которые получил недавно. И столкнулся
> в ТЗ с таким вот описанием структуры на Си.event_s struct{ event_type
> type;char datetime[18];  //строка, заканчивающаяся нулевым
> символом, содержащая  //время и дату в формате "dd/mm/yy
> hh:mm:ss"....Вот и не пойму. Я думал что "char datetime[18]"
> аналогичен Паскалевскому типу "datetime = array 0..17 of
> char". Но причём тут тогда комментарий о "нулевом символе
> в конце"?


Любая ANSI строка должна завершатся символом с нулевым кодом, дабы иметь возможность определить длину строки. Этот как бы аксиома. Почему тут добавлен "лишний" байт под этот самый нуль, хотя длина строки нам заранее известна? А потому что она известна нам, а не функциям, которые могут обрабатывать эту строку.


 
Германн ©   (2007-08-26 02:09) [6]


> Riply ©   (26.08.07 01:59) [1]

Извини, но я не про "похожесть". Вопрос про разницу между PChar и "char имя[18]" в описании поля структуры на Си.
Имхо, лучшим вариантом было бы обратиться на какой-нибудь форум сишников, но я не знаю ни одного. :(


 
fisher   (2007-08-26 02:11) [7]

Германн ©   (26.08.07 02:09) [6]
что тебе непонятно-то, программист?


 
J_f_S   (2007-08-26 02:11) [8]


> Германн ©   (26.08.07 02:09) [6]
> > Riply ©   (26.08.07 01:59) [1]Извини, но я не про "похожесть".
>  Вопрос про разницу между PChar и "char имя[18]" в описании
> поля структуры на Си.Имхо, лучшим вариантом было бы обратиться
> на какой-нибудь форум сишников, но я не знаю ни одного.
> :(


Блин. Нет никакой разницы. Просто последний символ массива установи в ноль. имя[17]=0.


 
Riply ©   (2007-08-26 02:12) [9]

> [6] Германн ©   (26.08.07 02:09)
>Извини, но я не про "похожесть". Вопрос про разницу между PChar и "char имя[18]"
>в описании поля структуры на Си.
Imho разница в том, что поле "char имя[18]" занимает 18 байт.


 
fisher   (2007-08-26 02:14) [10]

функции работы со строками в сишных библиотеках работаю со строками PChar
вот массив char и приводится добавлением нуля в конец к таким строкам чтобы сишные строковые функции можно было задействовать


 
Германн ©   (2007-08-26 02:14) [11]


> ferr ©   (26.08.07 02:03) [2]


> fisher   (26.08.07 02:04) [3]


> J_f_S   (26.08.07 02:08) [5]

Суть понятна. "Не первый день замужем" :)
Смысл не понятен. Поскольку на
> А потому что она известна нам, а не функциям, которые могут
> обрабатывать эту строку.

есть ответ моментальный - эта строка задана тем, кто её обрабатывает! И задана вполне однозначно!


 
fisher   (2007-08-26 02:15) [12]

кошмарр какой-то
совершенно дилетантский вопрос


 
fisher   (2007-08-26 02:17) [13]

Германн ©   (26.08.07 02:14) [11]
ну, вероятно, тот кто её обрабатывает захотел юзать дату как строку чтобы задейстовать сишные функции работы со строками, для убобства, читабельности,....или чего-то ещё


 
J_f_S   (2007-08-26 02:20) [14]


> есть ответ моментальный - эта строка задана тем, кто её
> обрабатывает! И задана вполне однозначно!

Ага. Классическая программистская засада. "Код потенциально небезопасен. Но же знаю, как его нужно использовать, и всегда буду использовать правильно". Счас. Вот решишь ты тестовый вывод через fprintf сделать - опа! Или  захочешь передать строку в винапишную функцию - превед!


 
Riply ©   (2007-08-26 02:20) [15]

> [12] fisher   (26.08.07 02:15)
>кошмарр какой-то
>совершенно дилетантский вопрос
>функции работы со строками в сишных библиотеках работаю со строками PChar
Меня тоже удивляет: какое отношение имеют "функции работы со строками",
к определению поля в структуре ?


 
Германн ©   (2007-08-26 02:22) [16]


> fisher   (26.08.07 02:15) [12]
>
> кошмарр какой-то
> совершенно дилетантский вопрос
>

Ес-сно дилетантский. А ты какой ожидал в сией крнференции?


 
fisher   (2007-08-26 02:22) [17]

вот ты сам мозгой раскинь
захотел я соединить строку "current date and time : " со строкой даты и времени
чё я должен возить с галимым массивом char?
если же дата и время строка тогда я могу просто вызвать функция конкатенации строк
типа Concat("current date and time : ", dateAndTimeString)


 
Германн ©   (2007-08-26 02:25) [18]


> J_f_S   (26.08.07 02:20) [14]
>
>
> > есть ответ моментальный - эта строка задана тем, кто её
> > обрабатывает! И задана вполне однозначно!
>
> Ага. Классическая программистская засада. "Код потенциально
> небезопасен. Но же знаю, как его нужно использовать, и всегда
> буду использовать правильно". Счас. Вот решишь ты тестовый
> вывод через fprintf сделать - опа! Или  захочешь передать
> строку в винапишную функцию - превед!
>

Эээ. Ну ты вопрос-то читал или "пробегал глазами":
:)


 
fisher   (2007-08-26 02:25) [19]

вот ты сам мозгой раскинь
например, захотел я соединить строку "current date and time : " с массивом char представляющим дату и время
чё я должен возиться с галимым массивом char вручную?
достаточно сделать массив char типом PChar добавление 0 в конец и тогда можно будет вызвать библиотечную функция конкатенации строк
p.s. попонятней


 
Riply ©   (2007-08-26 02:26) [20]

> [17] fisher   (26.08.07 02:22)
А может всетаки "размер имеет значение" ? :)
Это же поле структуры и влияет на нее и "смещение" следующего поля.


 
fisher   (2007-08-26 02:26) [21]

есть такая штука как сопровождение
и тот кто ноль пихнул в массив char очень верно поступил


 
J_f_S   (2007-08-26 02:28) [22]


> fisher   (26.08.07 02:26) [21]
> есть такая штука как сопровождениеи тот кто ноль пихнул
> в массив char очень верно поступил

Именно так.


 
fisher   (2007-08-26 02:28) [23]

Riply ©   (26.08.07 02:26) [20]
не понял Ваше глубокомысленно изречение


 
Германн ©   (2007-08-26 02:28) [24]


> fisher   (26.08.07 02:22) [17]
>
> вот ты сам мозгой раскинь
> захотел я соединить строку "current date and time : " со
> строкой даты и времени
> чё я должен возить с галимым массивом char?
> если же дата и время строка тогда я могу просто вызвать
> функция конкатенации строк
> типа Concat("current date and time : ", dateAndTimeString)
>

Сам то я "мозгой раскинул" ещё до того как задать сей вопрос.
Токмо не в этом суть. :(


 
fisher   (2007-08-26 02:32) [25]

Германн ©   (26.08.07 02:28) [24]
если в данный момент времени в программе то что массив char можно рассматривать как PChar -строку не имеет смысла не значит что этого не потребуется в будущемда даже если не самой программе
а внешней, кто будет с этими структурами работать, внешнему коду тоже будет удобней если массив char будет строкой


 
fisher   (2007-08-26 02:33) [26]

а вообще это не Ваша юрисдикция, Вам дали так - рабойте с тем что есть и пользуйте всё то удобство которое даёт вам то что массив char это строка


 
J_f_S   (2007-08-26 02:35) [27]


> fisher

Эк тебя тема зацепила ;)


 
Германн ©   (2007-08-26 02:52) [28]


> fisher   (26.08.07 02:32) [25]
>
> внешнему
> коду тоже будет удобней если массив char будет строкой
>

Ты это так думаешь или есть опыт работы в Си с подобными структурами?


> J_f_S   (26.08.07 02:35) [27]
>
>
> > fisher
>
> Эк тебя тема зацепила ;)
>

Да вот и я это заметил :)


 
_uw_ ©   (2007-08-26 08:23) [29]

В С

char datetime[18];

вовсе не обязано быть строкой, а может быть просто массивом байт. В приведенном фрагменте программист сообщает читающему (и себе тоже), что в datetime[18] хранится именно строка.


 
foo   (2007-08-26 08:43) [30]

Two strings walk into a bar. The bartender says "What would you like?"
The first string says "I think I"ll have a beer quag fulk boorg jdk^CjfdLk jk3s d#f67howe%^U r89nvy~~owmc63^Dz x.xvcu"
The second string says "please pardon my friend, he"s not null-terminated"


 
Zeqfreed ©   (2007-08-26 11:28) [31]

> Я думал что "char datetime[18]" аналогичен Паскалевскому
> типу "datetime = array 0..17 of char"

Аналогичен datetime = array[0..17] of Byte;
См. что _uw_ пишет в [29].


 
isasa ©   (2007-08-26 12:07) [32]

_uw_ ©   (26.08.07 08:23) [29]
:)
+ "заточенная" под сишный способ хранения строки(null-terminated), т.к. существует еще второй, классический, в виде информационного вектора.
Угадаем в каком языке используется?


 
isasa ©   (2007-08-26 12:09) [33]

Сорри, масив байт - "заточенный".


 
Kerk ©   (2007-08-26 12:09) [34]

PChar - это тоже строка заканчивающаяся нулем.. если что


 
isasa ©   (2007-08-26 12:12) [35]

Kerk ©   (26.08.07 12:09) [34]

PChar - это тоже строка заканчивающаяся нулем.. если что

Это указатель на место в памяти, которое должно заканчиваться нулем.
Нуль ставят обработчики этого места, которые работают по правилам null-terminated.


 
Anatoly Podgoretsky ©   (2007-08-26 13:20) [36]

> Германн  (26.08.2007 01:46:00)  [0]

Все просто, это напоминание разработчику, что бы для совместимости с PChar не забыл добавить NULL
В СИ нет байтов, только символы, а программист хочет эту структуру использовать как массив байтов и одновременно сохранить совместимость с PChar. И эта структура должна быть фиксированой длины.

Такое у меня толкование.


 
Германн ©   (2007-08-26 21:18) [37]


> Anatoly Podgoretsky ©   (26.08.07 13:20) [36]
>
> > Германн  (26.08.2007 01:46:00)  [0]
>
> Все просто, это напоминание разработчику, что бы для совместимости
> с PChar не забыл добавить NULL


Да это я ступил. Какое-то реле наверно замкнуло в мозгах :)
Сам ведь часто пользовался "zero-based arrays" как PChar"ом.


 
Kobik.   (2007-08-27 09:51) [38]

>Zeqfreed ©   (26.08.07 11:28) [31]
>> Я думал что "char datetime[18]" аналогичен Паскалевскому
>> типу "datetime = array 0..17 of char"

>Аналогичен datetime = array[0..17] of Byte;
>См. что _uw_ пишет в [29].
а помоему сдесь логичнее использовать string[17].
0 на конце будет автоматически. Конечно, все завист от того, насколько глубоко проводится перевод. Ведь в си есть функции для работы со строками (т.е. с char[...]), а их аналоги в паскале работают с string-ами.

Ну а вообще, не все ли равно как обозвать? Надо знать, что дальше с этим datetime будет делаться.


 
Германн ©   (2007-08-29 02:33) [39]

Не ну.
Почти закончил работу. Дошёл до последних строк ТЗ. И читаю:
Возможные ошибки:
Ошибки:  1 – невозможно открыть порт.
 2 – порт уже открыт.
 3 – порт занят.
 4 – ни один порт не открыт.
 5 – таймаут ожидания ответа от контроллера.
 6 – недопустимый номер ...
 7 – недопустимый номер ...
 8 – недопустимый статус ...
 9 – недопустимый код ...
 10 –
 ...
Список ошибок дополняется при реализации.

Не ну первые четыре (в принципе) есть куда помещать.
bool OpenPort(unsigned int port, unsigned int * errorCode, char * errorTxt)
А ни в одной другой функции в ТЗ нет параметра типа "errorCode"! А результат везде BOOL. :(

Похоже, что моим надеждам на появление "программистов" в моей конторе нанесён ещё один удар. Опять ЖЗЧ? :(((


 
J_f_S   (2007-08-29 03:02) [40]

Германн,  а в чем вопрос?
errorCode - указатель. Если порт открыт, то результат функции, полагаю, - тру, и значение errorCode можно не смотреть. Если порт открыть не удалось - то функция возвращает фальш и если надо, то причину ошибки можно узнать в *errorCode.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.04 c
4-1175501821
Рамиль
2007-04-02 12:17
2007.09.30
Привелегии бэкапа


2-1188756366
Bast
2007-09-02 22:06
2007.09.30
Проблема


2-1188904217
Service
2007-09-04 15:10
2007.09.30
TServerSocket & TClientSocket


2-1188907422
ArtikZ
2007-09-04 16:03
2007.09.30
PrintScreen


15-1188733499
самовар
2007-09-02 15:44
2007.09.30
Как соединить в локальную сеть два здания на расстоянии





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский