Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 527
от 18.09.2006, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 390, Экспертов: 54
В номере:Вопросов: 3, Ответов: 6


Вопрос № 55203: Здраствуйте!!! Поясните пожалуйста, человеческим языком кусок программы из приложения. Тоесть что зачем и как мы делаем в каждой из строк кода!!! ...
Вопрос № 55216: функция принемает значения: void input(char *data); И обрабатывает их внутри, но как узнать размер переданных в нее данных??? Это не строки, это массив данных и нулевых значений в нём много, поэтому strlen(data) непригодна. ..
Вопрос № 55287: Здравсвуйте, Эксперты! Подскажите как работать с данными в excel'ой книге (считывать данные из ящеек). Как это сделать через com-объекты (примеры или где почитать)? ...

Вопрос № 55.203
Здраствуйте!!!
Поясните пожалуйста, человеческим языком кусок программы из приложения. Тоесть что зачем и как мы делаем в каждой из строк кода!!!

Приложение:

Отправлен: 12.09.2006, 20:53
Вопрос задал: chikanok (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vaga
Здравствуйте, chikanok!
TAPI - штука серьезная. Трудно судить по этому куску программы как линия, которую Вы хотите мониторить была активизирована. Советую почитать книгу Chris Sells "Windows Telephony Programming". Он же написал TFX-библиотеку, так называемую "обертку" для чистых TAPI-функций, что существенно облегчает жизнь в процессе написания программ. TFX можно добыть здесь
http://www.sellsbrothers.com/.

Для общего развития:
http://www.i-b-a-m.de/Andreas_Marschall's_TAPI_and_TSPI_FAQ.htm

---------
Вольному - воля
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 12.09.2006, 22:48


Вопрос № 55.216
функция принемает значения:
void input(char *data);

И обрабатывает их внутри, но как узнать размер переданных в нее данных???
Это не строки, это массив данных и нулевых значений в нём много, поэтому strlen(data) непригодна.

Если передавать динамически созданный массив через new то мы конечно можем узнать его размер через msize.
Ну а как быть если помимо динамичесского массива мы принимаем и статические наример обычные строки (но с несколькими нулями например в теле), ну или хотябы туже обычную строку. например input("stroka dannih");

Вот... только один простенький вопрос... как мне узнать размер данных переданых по указателю в функцию. очень нехочется отдельно передовать размер в функцию вместе с данными, темболее что я сам невовсех случаях его знаю.
Очень прошу помочь ;(
Отправлен: 12.09.2006, 21:38
Вопрос задал: DDMZ (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Physicist
Здравствуйте, DDMZ!

Размер переданных данных по указателю на них Вы не определите ни как, поэтому предлагаю варианты:
1. Передавать размер отдельным параметром (то, чего Вы не хотите).
2. Передавать структуру типа
struct sdata
{
int size;
char* data;
};
3. Использовать шаблон vector<> из STL.
4. Хранить размер в первых нескольких байтах char* data (но такой вариант удобен не всегда).
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 12.09.2006, 21:54
Оценка за ответ: 5
Комментарий оценки:
эх... комунить то надо отзыв после себя оставить =) оставляю первому кто написал что нельзя.

Я вообщем сделал так(пришлось): void input(char *data, int c);
если c=-1 то массив динамический и размер функция определит сама, если c>0 то соответственно это размер массива.

Отвечает: Vaga
Здравствуйте, DDMZ!
Просто смотрим в справку по VC++:

// expre_sizeof_Operator.cpp
// compile with: /EHsc
#include <iostream>

size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}

using namespace std;
int main()
{
char szHello[] = "Hello, world!";

cout << "The size of a char is: "
<< sizeof( char )
<< " The length of " << szHello << " is: "
<< sizeof szHello
<< " The size of the pointer is "
<< getPtrSize( szHello ) << endl;
}
результат:

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4


---------
Вольному - воля
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 12.09.2006, 23:00

Отвечает: Хватов Сергей
Здравствуйте, DDMZ!

В общем случае - никак!

Если есть возможность, пусть тот, кто эту функцию вызывает, передает следующим пераметром явно размер данных.

Ну да, если память под переданные данные была получена через malloc или new - там прямо перед данными есть некий заголовок. Можно разобраться в реализации, подвинуть указатель назад и посмотреть на данные этого заголовка, но это совсем грязный способ.
Ответ отправил: Хватов Сергей (статус: 4-ый класс)
Ответ отправлен: 13.09.2006, 12:11

Отвечает: dentist
Здравствуйте, DDMZ!
никак.
самый простой вариант это добавить в функцию аргумент говорящий о размере первого.
можно конечно повыпендриваться и сказать что по указателю некая структура первые 4 байта которой есть размер в всё остальное данные но спросите себя вы уверены что потом не запутаетесь?
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 3-ий класс)
Ответ отправлен: 14.09.2006, 09:10


Вопрос № 55.287
Здравсвуйте, Эксперты!
Подскажите как работать с данными в excel'ой книге (считывать данные из ящеек). Как это сделать через com-объекты (примеры или где почитать)?
Отправлен: 13.09.2006, 14:14
Вопрос задал: D3rp (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Vaga
Здравствуйте, D3rp!
использовать дерективу #import.
Подробно в статье http://www.rsdn.ru/article/vcpp/import.xml
---------
Вольному - воля
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 13.09.2006, 20:29
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное