簡體   English   中英

C ++字符的字節數組

[英]c++ byte array of chars

我在使用char型字節數組時遇到問題。 我正在創建文件傳輸程序,該程序通過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: %lu\n", 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之前的地址讀取的。

編輯:原來的答案是錯誤的,因為在這種情況下循環根本不會執行。 但是,問題在於向量的內容不是以空值結尾的(因為它是沒有任何字符串語義的純緩沖區),因此它看起來像垃圾,但實際上是可以的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM