Russian Qt Forum
Ноябрь 23, 2024, 19:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: мусор в строке  (Прочитано 4237 раз)
ixtorio
Гость
« : Март 30, 2011, 18:44 »

написав класс, я наткнулся на проблему, в конец строки добавляется мусор. Самое смешное, что я не понимаю откуда он берется так, как я выделяю определенное адресное пространство под строку не больше, не меньше.

Собственно сам код(Прокомментировал, чтоб быстрее можно было разобраться в коде) _BruteDleParam_

Код
C++ (Qt)
struct {
       WSADATA ws;
       SOCKET socket;
       fd_set fset;
       sockaddr_in* addr;
       hostent* address;
       char *Server;
       char *Request;
       char sBuff[256];
       char rBuff[1024*1024];
   } pConnect;
// Проблема ниже - добавляет в конец строки мусорок эээ<<<<< и т.п.
strncpy(this->pConnect.Server,Host,len);
 

Если можете то объясните более разжеванно чтоб понятно было как действовать в таких ситуациях
« Последнее редактирование: Март 30, 2011, 18:49 от ixtorio » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 30, 2011, 18:53 »

А где ты создаешь Server?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ixtorio
Гость
« Ответ #2 : Март 30, 2011, 18:56 »

         this->pConnect.Server = (char*)malloc(len);
         ZeroMemory(this->pConnect.Server,sizeof(this->pConnect.Server));

int len это длина строки
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 30, 2011, 19:04 »

1. this->pConnect.Server = (char*)malloc(len + 1); или strncpy(this->pConnect.Server,Host,len - 1);
2. ZeroMemory(this->pConnect.Server,sizeof(this->pConnect.Server) * len);

Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ixtorio
Гость
« Ответ #4 : Март 30, 2011, 19:40 »

Не получилось..
Даже если посмотреть
1: мы выделяем память на размер строки + 1
2: обнуляем память от начало до размера строки(sizeof(server)) * размер строки(len)  полюбому не то что-то)
Записан
Fat-Zer
Гость
« Ответ #5 : Март 30, 2011, 19:44 »

не проще ли, чем обнулять память заранее, обнулить байт после копирования:
this->pConnect.Server[len] = 0;
« Последнее редактирование: Март 30, 2011, 19:48 от Fat-Zer » Записан
ixtorio
Гость
« Ответ #6 : Март 30, 2011, 19:47 »

Спасибо.  Все получилось
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 22.