Я использую сервер tcp, который я написал для обработки входов в базу данных. У меня есть клиент tcp, сидящий на сервере, который отправляет имя файла на сервер tcp, сидящий на другом Linux-сервере. после получения имени файла сервер linux переходит в общую папку и вытаскивает файл, а затем вставляет его в базу данных.правильно объявляющий буфер для сервера tcp C++
Моя проблема заключается в правильном объявлении буфера и очистке его, чтобы убедиться, что я получаю правильное имя файла без добавления таблеток или чего-либо, что удалено из него.
прямо сейчас он работает так:
char data[1024];
это хорошо, но это не будет автоматически удалять буфер полностью, поэтому я попытался неявно выделить память для «данных», такие как:
char *data = (char*) malloc(1024 * sizeof(char));
...
free(data);
ИЛИ
char *data = new char[1024];
...
delete[] data;
по какой-то причине двух вышеупомянутых декларации объявляют буфер от размера = 8 Я получил это с помощью
sizeof(data);
также то, что я получаю, всего 8 символов. Я не уверен, почему он это делает, любая помощь?
EDIT
char *data = (char*)malloc(1048 * sizeof(char));
if(data==NULL) exit(1);
cout << "DATA Size: " << sizeof(data) << "\n";
int msglen = read(conn, data, sizeof(data));
cout << "Server got " << msglen << " byte message: " << data << "\n";
if(write(conn, &msglen, sizeof(msglen))<0){
cout << "Failed to write back to the client " << strerror(errno);
}
free(data);
close(conn);
Как вы принимаете данные? Причина sizeof (data) возвращает 8, потому что данные являются указателями, а в 64-битной системе размер указателя будет 8 байтов. –
см. В разделе edit, чтобы ответить на ваш вопрос. – laitha0
данные о символах [1024]; память, занятая этим, автоматически будет освобождена после выхода из области видимости. –