在某个单词后面填充数组内的动态值

时间:2011-12-08 18:16:56

标签: c arrays client-server arguments

我想要做的是将数据放在一个名为“msg”的char数组中但在此之前我想要包含任何单词,即“DATA”以便在发送msg之前区分即将到来的数据客户端代码到服务器代码。所以它会是这样的:

D   A   T   A   ‘\0’    i   j

我在client.c代码中执行了以下操作:

char msg[10]= "DATA'\0' ";
printf(" the msg %s\n",msg);

for(int i=0;i<layers;i++) // loop for the number of layers
for(int j=0;j<packetsPerLayer;j++) // loop for the number of packets in each layer
{ 
    sprintf( FunctionToStartFillingAtIndex4(msg)," %d %d", i,j);
            printf("%s",msg);
    //here will be the sendto function which will send the msg containing the word “DATA”
     sendto();
}

我完成了在客户端和服务器代码之间发送和接收连接部分。但是,我的问题是我不知道如何在单词“DATA”之后用索引填充数组,我不知道是否有某种方法可以帮助我这样做。简而言之,如何告诉数组在单词“DATA”之后填充索引[5]和索引[6]中的i和j。

提前致谢。

1 个答案:

答案 0 :(得分:0)

假设您实际上正在使用C(因为示例代码中没有C ++)并且msg中有足够的空间来包含您的完整消息(我怀疑10个字节对于所有内容都足够了),你可以做这样的事情:

char msg[50] = "";
int index = 0;
printf(" the msg %s\n", msg);
for(int i=0; i<layers; i++)
{
    for(int j=0; j<packetsPerLayer; j++)
    {
        index += snprintf(&(msg[index]), 50 - index, " DATA");
        //add i to the message and store how many characters it took up
        index += snprintf(&(msg[index]), 50 - index, " %d", i);
        //add j to the message
        index += snprintf( &(msg[index]), 50 - index, " %d", j);
        printf("%s", msg);
        //do sendto()
    }
}

我强烈建议您使用snpritnf而不是sprintf,以避免意外超出您的输出缓冲区。

另请注意,ij在转换为字符串表示时几乎总是占用多个字节(除非您绝对确定它们永远不会是负数或大于9)

修改:我已更改代码以反映您的评论。在字符串中的第一个' '之前会有一个额外的空格('D'),但您可以轻松地将&(msg[1])作为缓冲区参数提供给sendto而不是{{} 1}}以适应这一点。同样,您需要确保缓冲区足够大以容纳完整的消息。