Russian Qt Forum

Программирование => С/C++ => Тема начата: ixtorio от Март 30, 2011, 18:44



Название: мусор в строке
Отправлено: 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);
 

Если можете то объясните более разжеванно чтоб понятно было как действовать в таких ситуациях


Название: Re: мусор в строке
Отправлено: Пантер от Март 30, 2011, 18:53
А где ты создаешь Server?


Название: Re: мусор в строке
Отправлено: ixtorio от Март 30, 2011, 18:56
         this->pConnect.Server = (char*)malloc(len);
         ZeroMemory(this->pConnect.Server,sizeof(this->pConnect.Server));

int len это длина строки


Название: Re: мусор в строке
Отправлено: Пантер от Март 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);



Название: Re: мусор в строке
Отправлено: ixtorio от Март 30, 2011, 19:40
Не получилось..
Даже если посмотреть
1: мы выделяем память на размер строки + 1
2: обнуляем память от начало до размера строки(sizeof(server)) * размер строки(len)  полюбому не то что-то)


Название: Re: мусор в строке
Отправлено: Fat-Zer от Март 30, 2011, 19:44
не проще ли, чем обнулять память заранее, обнулить байт после копирования:
this->pConnect.Server[len] = 0;


Название: Re: мусор в строке
Отправлено: ixtorio от Март 30, 2011, 19:47
Спасибо.  Все получилось