2011-12-08 20 views
0

私がしようとしているのは、 "msg"という文字配列の中にデータを置くことですが、その前に、クライアントコードからサーバーコードにmsgを送信する前に、次のデータを取得します。だから、このようなものになります:私はいるclient.cコードに次のようでした特定の単語の後に配列内の動的値を入力する

D A T A ‘\0’ i j 

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

Iは、クライアントとサーバのコードとの接続部の送受信を行っています。しかし、私の問題は、 "DATA"という単語の後にインデックスを配列に埋め込む方法がわからないことです。これを行うのに役立つ特定の方法があるかどうかはわかりません。簡単に言うと、 "DATA"という単語の後にindex [5]とindex [6]の内側でiとjを埋めるように配列に指示する方法。

ありがとうございます。

+0

CまたはC++を使用していますか? –

+0

私はCプログラミング言語を使用しています –

答えて

0

あなたのコード例ではC++がないので、実際にはCを使用していて、完全なメッセージを入れるには十分なスペースがあるとします(そして、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() 
    } 
} 

私は強くあなたのouputをバッファオーバーランを誤って避けるためにsnpritnfsprintf上を使用してお勧めします。

また、ijは、文字列表現に変換されたときにほとんど常に1バイト以上を占めることに注意してください(負でないか、9より大きいことが絶対に確実でない限り)。

を編集してください:コメントを反映するようにコードを変更しました。文字列に最初の'D'の前に余分なスペース(' ')がありますが、&(msg[1])msgではなくsendtoに簡単に渡すことができます。繰り返しますが、バッファが完全なメッセージを保持するのに十分な大きさであることを確認する必要があります。

+0

はい、大丈夫です。しかし、それを理解するためにコードを実行すると、結果は50バイトの配列全体が塗りつぶされていますが、私がする必要があるのは次のようなものになります:DATA00 DATA 01 DATA02 DATA03次に、2番目のレイヤDATA 10 DATA 12 DATA13など。 –

+0

この情報を含めるには、質問を編集する必要があります。正しい出力の例を追加して明確にすることも検討してください。 – multipleinterfaces

関連する問題