2014-11-22 4 views
0

Я работаю с WinSock, мне нужно отправить 2D-массив. , напримерпреобразование массива 2d char в char *

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

и чем отливают его (символ *).

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

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

+0

Во избежание возможного переполнения при чтении: 'fgets (SendBuf [i], sizeof (SendBuf [i]), stdin);'. – Jarod42

+0

Что такое 'BufLen'? – Jarod42

+0

int BufLen = 1024; – Mankind

ответ

1

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

const int Buflen = 10*1024; 

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

0

Я не могу комментировать здесь пока нет, но, глядя на ваш последний комментарий, я думаю, проблема с 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; 

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

+0

Я согласен с тобой, я забыл о размере. – Mankind