преобразование массива 2d char в char*

Я работаю с WinSock, мне нужно отправить массив 2D-символов. Например

    char SendBuf[10][1024];
for (int i = 0; i < 10; i++){
    fgets(SendBuf[i], sizeof(SendBuf), stdin);
}

и затем бросил его на (char *).

 iResult = sendto(SendSocket, (char*)SendBuf, BufLen, 0, (SOCKADDR *)& RecvAddr, sizeof(RecvAddr));

Все работает. Но на стороне сервера я просто получаю только значение Sendbuf[0][1024], что мне делать, чтобы прочитать весь буфер.


person Mankind    schedule 22.11.2014    source источник
comment
Во избежание возможного переполнения при чтении: fgets(SendBuf[i], sizeof(SendBuf[i]), stdin);.   -  person Jarod42    schedule 22.11.2014


Ответы (2)


Должен работать с:

const int Buflen = 10*1024;

и обратите внимание, что строка N будет располагаться по адресу RecBuf[N*1024]

person Klamer Schutte    schedule 22.11.2014

Я пока не могу комментировать здесь, но, глядя на ваш последний комментарий, я думаю, что проблема в вашем BufLen. Если вы отправляете только 1024 байта, то и получаете только 1024 байта. Вам нужно, чтобы ваш BufLen был 10*1024*1.

"char SendBuf[10][1024]" будет состоять из 10 массивов символов размером 1024*sizeof(char) от начала до конца... один за другим в памяти. Итак, общий размер будет 10*1024*sizeof(char)


Если вы посмотрите на пример кода winsock по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/ms740148%28v=vs.85%29.aspx использует:

char SendBuf[1024];
int BufLen = 1024;

Это можно представить как:

char SendBuf[1][1024];
int BufLen = 1*1024;

Это может немного облегчить понимание того, как размер работает с такими массивами.

person Amadeus    schedule 22.11.2014
comment
я согласен с вами, я забыл о размере. - person Mankind; 22.11.2014