2011-12-08 15 views
0

什么我试图做的就是把所谓的“味精”的字符数组里面的数据,但在此之前,我想包括为了区分任何字,即“DATA”在将来自客户端代码的味精发送到服务器代码之前,即将到来的数据。因此,这将是这样的:某个单词后灌装内部阵列的动态值

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”之后指数在数组中填写,我不知道是否有某种方式,可以帮助我这样做。简单地说,如何告诉数组在单词“数据”之后填充索引[5]和索引[6]中的i和j。

在此先感谢。

+0

是否使用C或C++? –

+0

我正在使用C编程语言 –

回答

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() 
    } 
} 

我强烈建议使用snpritnfsprintf,以避免意外超越你传至输出缓冲器。

另外请记住,ij转换为字符串表示时几乎总是占用多个字节(除非您完全确定它们永远不会是负数或大于9)。

编辑:我已经改变了代码,以反映您的评论。届时将有字符串中的第'D'之前的额外空间(' '),但你可以很容易地只提供&(msg[1])作为缓冲参数sendto,而不是msg,以适应这一点。同样,您需要确保您的缓冲区足够大以容纳完整的消息。

+0

是的,你没事。但是,当我为了去了解它运行的代码,结果是50个字节整个阵列是越来越充满,但我需要做的将是这样的:DATA00 DATA 01 DATA02 DATA03那么它将与第二层数据开始10 DATA 12 DATA13等等。 –

+0

您应该编辑您的问题以包含此信息。另外考虑增加一个正确输出的例子,使其更清晰。 – multipleinterfaces