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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 993
от 11.02.2008, 22:35

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 121881: Здравствуйте. В приложении есть макет программы. Как ее нужно модифицировать, чтобы при нажатии кнопки по заданному IP-адресу передать по UDP-протоколу строку, находящуюся в edit'е? Сам IP-адрес будет жестко вбит в код программы - пусть это будет 10....
Вопрос № 121926: Здавствуйте всем! Помогите советом по работе со строками в Си. пишу для микроконтроллера. Не большой знаток Си т.к. что многое не понятно. Вообщем не удается удалить последний символ в строке. на его место пытаюсь записать 0 или ".n"...
Вопрос № 121929: Здавствуйте всем! Помогите советом по работе со строками в Си. пишу для микроконтроллера. Не большой знаток Си т.к. что многое не понятно. Вообщем не удается удалить последний символ в строке. на его место пытаюсь записать 0 или "/n". Ничег...

Вопрос № 121.881
Здравствуйте. В приложении есть макет программы. Как ее нужно модифицировать, чтобы при нажатии кнопки по заданному IP-адресу передать по UDP-протоколу строку, находящуюся в edit'е? Сам IP-адрес будет жестко вбит в код программы - пусть это будет 10.0.0.2. Порт можно взять любой неиспользуемый.
Копия этой же программы будет запущена и на компьютере с адресом 10.0.0.2, поэтому программе желательно еще отловить событие прихода такого пакета на этот порт. Пришедшее сообщение можно вставить в edit, в кач. доказательства, что связь есть.
Передача должна быть не широковещательной, обычной. Строку нужно послать сразу - без предварительных проверок связи.

Приложение:

Отправлен: 06.02.2008, 03:06
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ross
Здравствуйте, Blackie!

При использовании протокола UDP данные отправляются при помощи функции
int sendto (
SOCKET s,
const char FAR * buf,
int len,
int flags,
const struct sockaddr FAR * to,
int tolen
};

где s - сокет, buf - отправляемый буфер, len - длина буфера, to - указатель на структуру sockaddr_in, которая хранит адрес и порт по которым отправляется пакет. Функция connect не используется.

Принимаются данные при помощи функции
int recvfrom (
SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen
);
Сокет должен быть привязан к порту командой bind. Использовать функции listen и accept не нужно.

Приложение:

---------
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 07.02.2008, 16:56
Оценка за ответ: 5


Вопрос № 121.926
Здавствуйте всем! Помогите советом по работе со строками в Си. пишу для микроконтроллера. Не большой знаток Си т.к. что многое не понятно. Вообщем не удается удалить последний символ в строке. на его место пытаюсь записать 0 или ".n"
Отправлен: 06.02.2008, 13:18
Вопрос задал: Anatoly (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Anatoly!

Пример под DOS-приложение в MS VC++ 6.0 :

#include "stdafx.h"

void main()
{
char string[] = "abcdefgh"; // изначальная строчка, при инициализации в хвосте всегда "невидимый" ноль
char *psz = string; // рабочий указатель, тут указывает на начало строки

while(*(++psz)); // гоним указатель по строке, пока не найдём хвост (ноль)
*(psz-1)=0; // делаем шаг назад и забиваем последний(непустой) символ нулём

printf(string); // вывод результата (для проверки)
}

советую посмотреть под дебагом код и память и состояние переменных по шагам, чтоб увидеть, как это работает внутри.
Ответ отправил: Сандров Алекс (статус: 3-ий класс)
Ответ отправлен: 06.02.2008, 13:35
Оценка за ответ: 3
Комментарий оценки:
Спасибо большое. Но я это делал по Вашему примеру,. Не хочет перезаписываться . Похоже, что это особенности компиляторов Си.


Вопрос № 121.929
Здавствуйте всем! Помогите советом по работе со строками в Си. пишу для микроконтроллера. Не большой знаток Си т.к. что многое не понятно. Вообщем не удается удалить последний символ в строке. на его место пытаюсь записать 0 или "/n". Ничего не дает писать.
Хотелось бы знать как в стандарте Си это можно сделать. Не хочется вводить дополнительные переменные, хочется память сэкономить..
Кусок из программы в приложении
функция char_key() возвращает символы "0".."9", "-", "+"

Приложение:

Отправлен: 06.02.2008, 13:33
Вопрос задал: Anatoly (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Maksim Trofimov
Здравствуйте, Anatoly!
(1)
strcat(*tstr, key_pr); key_pr в данном случае не строка, так как не существует завершающего символа конца строки 'key_pr[2] = 'strcat(*tstr, key_pr);
(2)
strncpy(*tstr, *tstr, lst-1); лучше заменить на *tstr[lst-1] = '
Ответ отправил: Maksim Trofimov (статус: 4-ый класс)
Ответ отправлен: 06.02.2008, 14:36
Оценка за ответ: 3
Комментарий оценки:
Спасибо конечно. Но эти очевидные варианты я перепробовал. Проблема в том, что после данного выражения
*tstr[lst-1] =

Отвечает: Lang21
Здравствуйте, Anatoly!

Может быть, компилятор располагает Вашу строку во флэш-памяти?
В этом случае вы не сможете ее изменить в процессе выполнения программы.
Ответ отправил: Lang21 (статус: 4-ый класс)
Ответ отправлен: 06.02.2008, 17:33

Отвечает: Ross
Здравствуйте, Anatoly!

Непонятно, зачем вы передаете в функцию указатель на тип SSTR, т.к. он уже является указателем. А вообще обрезку строки на 1 символ можно сделать так (при условии, что исходная строка заканчивается нулевым символом):

typedef char SSTR[5];

void strcut(SSTR pStr)
{
if (*pStr) pStr[strlen(pStr)-1] = '}
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 07.02.2008, 00:53
Оценка за ответ: 4
Комментарий оценки:
А разве для строк
PStr и *pStr не одно и тоже?
Повторяюсь, проблема в том, что не хочет он ничего писать на место последнего символа.
подробности я уже описал на мини форуме.
Мне вот и интересно знать почему. может это Си для микроконтроллеров такой. Почему такой?


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное