Вопрос № 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 не одно и тоже? Повторяюсь, проблема в том, что не хочет он ничего писать на место последнего символа. подробности я уже описал на мини форуме. Мне вот и интересно знать почему. может это Си для микроконтроллеров такой. Почему такой?