labwindows: Какой аргумент нужен именно ServerTCPRead?

В документации Labwindows сказано следующее о методе ServerTCPRead:

int ServerTCPRead (unsigned int conversationHandle, void *dataBuffer, size_t dataSize, unsigned int timeOut);

dataBuffer void * Указатель на буфер для хранения данных.

Однако, когда я фактически объявляю указатель и передаю его методу, он возвращается со следующей ошибкой:

FATAL RUN-TIME ERROR: "test1.c", строка 146, столбец 61, идентификатор потока 0x00001474: аргумент массива слишком мал (1 байт). Аргумент должен содержать не менее 60000 байтов (60000 элементов).

Вот код, который я использую:

char * receiveBuf="";
    ssize_t dataSize = 60000;

    switch (event)
        {
        case TCP_CONNECT:

            break;
        case TCP_DATAREADY:
            if ((dataSize = ServerTCPRead (g_hconversation, receiveBuf,
                                           dataSize, 1000))
                < 0)
                {
                //SetCtrlVal (g_hmainPanel, MAINPNL_RECEIVE, "Receive Error\n");

                }
            else
                {
            display_value_from_client(receiveBuf);

                }                                            
            break;

1 ответ

Решение

Вы выделили receiveBuf как пустую строку, поэтому нет места для хранения данных, которые вы получили бы при вызове функции. Я бы заменил

char * receiveBuf="";
ssize_t dataSize = 60000;

с

ssize_t dataSize = 60000;
char * receiveBuf = malloc(dataSize);

и не забывайте звонить бесплатно позже по мере необходимости.

Также на основании ошибки этот вызов может блокироваться, пока не получит байты dataSize. Вы должны проверить документацию для этого.

Другие вопросы по тегам