c++字符字节数组
c++ byte array of chars
我遇到了字符字节数组的问题。我正在创建文件传输程序,它通过TCP套接字传输二进制数据。所以,当我从块中获取数据时,我将它们保存到临时容器中,然后我必须添加一个地方来保存整个数据。我试过std::vector,但效果不好(或者我用错了)
size_t nbytes = 0;
char buffer[5]; //temporary container.
int result = 0;
std::vector<char> abc;
if (ioctl(sockfd, FIONREAD, (char*)&nbytes) < 0)
{
printf("[-] Error getting available data.n");
return -1;
}
printf("[*] Bytes available: %lun", nbytes);
while(true)
{
if(nbytes > sizeof(buffer))
{
result = recv(sockfd, buffer, sizeof(buffer), 0);
for(int i = 0; i < result; i++)
{
abc.push_back(buffer[i]); //big data causes memory corruption.
}
nbytes -= result;
continue;
}
else if(nbytes <= sizeof(buffer) && nbytes != 0)
{
result = recv(sockfd, buffer, nbytes, 0);
for(int i = 0; i < result; i++)
{
abc.push_back(buffer[i]); //big data causes memory corruption.
}
break;
}
else
{
result = 0;
break;
}
}
printf("Data Received: %s", &abc[0]);
如果recv
失败,它返回SOCKET_ERROR
,但您不检查它,而是使用它作为接收到的字节数。由于SOCKET_ERROR
是#define
d到-1,您可以有效地从buffer
之前的地址读取。
编辑:原来的答案是错误的,因为在这种情况下,循环根本不会执行。然而,问题是向量的内容不是以空结束的(因为它是一个没有任何字符串语义的普通缓冲区),所以它看起来像垃圾,但实际上是可以的。
相关文章:
- 输出没有重复元素的动态数组(收缩数组)C++
- 将字符串转换为无符号字符数组/字节数组
- 检查彩虹数组(检查数组的反向样式是否与自身匹配)
- 如何创建对齐的数组 c++ 数组?
- 查找数组中数组元素的重复出现?
- C++释放带有子数组的数组的内存分配
- 返回一个数组,该数组包含数组中的数量,该数组数量较小或等于给定数组中的元素
- 通过键盘输入字符串数组和 int 数组的数组大小
- 如何在C 中创建类似于Python的Numpy数组的数组
- 无法获取数组内数组的总和
- C4838 警告,包含常量字符* 数组的数组初始化
- 连接数组,数组 1 内存消失C++
- 如何在C++中创建二维数组的数组
- 获取字符数组C++数
- 2D数组中数组下标的类型"int[int]"无效
- C 模板类动态数组的数组到数组
- 结构数组的数组
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- 对象的数组-STD ::数组 - 构造函数初始化问题
- 使用SSE内部函数将布尔数组(8字节布尔)转换为int或char