将2d char数组转换为char *

时间:2014-11-22 13:07:15

标签: c++ arrays winsock2

我正在使用WinSock,我需要发送一个2D char数组。 例如

    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]的值,我该怎么做才能读取整个缓冲区。

2 个答案:

答案 0 :(得分:1)

应该使用:

const int Buflen = 10*1024;

并注意字符串N将位于RecBuf [N * 1024]

位置

答案 1 :(得分:0)

我还不能在这里发表评论,但看看你的最后评论,我认为你的BufLen就是问题所在。如果您只发送1024个字节,那么这就是您只接收1024个字节的原因。你需要你的BufLen为10 * 1024 * 1.

“char SendBuf [10] [1024]”将是10个大小为1024 * sizeof(char)端口到端的字符串数组...在内存中一个接一个地。因此,它的总大小将为10 * 1024 * sizeof(char)


如果你看一下http://msdn.microsoft.com/en-us/library/windows/desktop/ms740148%28v=vs.85%29.aspx的示例winsock代码,它会使用:

char SendBuf[1024];
int BufLen = 1024;

这可以想象为:

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

这可能会让人们更容易看到这些数组的大小如何。