Форум: "Прочее";
Текущий архив: 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