2016-05-02 15 views
0
read(client_sockfd, &chID, 4); 
char newID[4]; 
for(int i; i<5; i++){ 
    newID[i] = chID[i]; 
} 

私はcharのchID [4]をソケットで読み取っています。最初の4文字をnewIDに入れたいと思います。上記は私が試したものですが、newIDを文字列にコピーして印刷すると、奇妙な出力が得られます。どんな指導?文字配列内の最初の大量の文字をC++の別の文字配列にコピーする方法はありますか?

+3

あなたは 'i = 0;'を持っていません –

答えて

1

あなたはそれを初期化せずにforループ内iを宣言します。これがあなたに「奇妙な価値」をもたらす理由です。是正するためには、次のように記述する必要があります。

for(int i=0; i<5; i++)

は、この情報がお役に立てば幸い!

+0

この方法とmemcpyのどちらにも違いがありますか?あるいは、彼らは同じことをしていますか? – anscmc

+0

@anscmcあなたは両方を使うのが良いです。私はあなたが使用している特定のコードに応答して上記の答えを掲示し、あなたがなぜ奇妙な値*を得ているのかを指摘しました。どんなアプローチが良いかは、正確に何を達成しようとしているかによって決まります。その他の詳細[ここ](http://stackoverflow.com/questions/4729046/memcpy-vs-for-loop-whats-the-properway-to-copy-an-array-from-a-pointer)。 –

0

ちょうどバイトをコピーします。

memcpy(newID, chID, 4); 
0

ここで、いくつかの人々が見落としているように見えることに注意してください。chIdが長さ4の場合、ループの境界はi = 0; i < 4.これでi = 0,1,2,3が得られます。 (一般的なプログラミングのヒント、可能であればあなたの頭にループを張ってください)少なくとも、プログラムが本当にあなたが意図したことをしていると満足するまで。

注:あなたは文字列にchIdをコピーしていません。それをchar配列にコピーしています。それはセマンティクスのように見えるかもしれませんが、 "string"はC++のデータ型に文字の配列とは異なる名前を付けます。タイトルの中に正しく入っています。質問の説明で間違っています。

+0

ありがとう、エリック。文字列変換について:私はそのコードを投稿しませんでした。ごめんなさい。このループの後、私はstrにnewIDをコピーするために "string str(newID)"を使い、それをcoutで印刷していました。私が受け取った3つの答えで、私は私の解決策を見つけたと思います。ありがとうございました! – anscmc

関連する問題