2017-05-08 9 views
1

に私はのconst char型にint型からの行に、21エラー無効な変換* [fpermissive] C

エラー

エラー無効な変換を、私は次のコードを実行し、このエラーが出ます* [fpermissive]

コード

receive(struct sockaddr_in sockad, struct message m){ 
    int rc; 
    int i; 
    int ibuf; 
    i = sizeof(sockad); 
    rc = recvfrom(sd,&m,strlen(ibuf),0,(struct sockaddr *)&sockad,(unsigned long)&i); /* line 21*/ 
    if (rc < 0) { 
    perror("recvfrom"); exit(1); 
    } 
} 

私はソルを試してみましたstackoverflowのではなく、運

+3

このフラグメントにはいくつか問題がありますが、_completeプログラムが表示されていないため、修正方法を教えることはできません。 (例えば、 'receive'のプロトタイプが間違っていると強く疑うので、呼び出し側に連絡する必要があります) – zwol

+1

' ibuf'、 'int'を関数' strlen() 'に渡しています。ヌルで終わる文字の配列を指し示す 'char *'になるようにします。 'ibuf'は初期化されていないので、実際にやりたいことはできません。 –

+1

また 'int i;' - > 'socklen_t i;' – chux

答えて

3

エラーはあなたがsizeof(m)を使用することを意図している場合がありますが、あなたは、strlenに文字列を渡す必要がありint ibuf ...

strlen(ibuf) ...によって引き起こされていないことション。

ように、あなたはまた、struct message *mのように、ポインタを使用することを意図している場合があります:問題はコードである

void receive(struct sockaddr_in * sockad, struct message * m){ 
    int rc; 
    socklen_t i; 
    i = sizeof(*sockad); 
    rc = recvfrom(sd, m, sizeof(*m),0, sockad, &i); /* line 21*/ 
    if (rc < 0) { 
    perror("recvfrom"); exit(1); 
    } 
} 
+0

どうすればいいですか? –

+0

'(unsigned long)&i'が' i'で初期化されていない 'int'も間違っていますし、' struct sockaddr_in'引数もおそらく呼び出し元の変数へのポインタになりたがります。 – zwol

+0

@MariyamMohammedJalil、私はあなたの最初の意図は何だったのか分かりませんが、私はより詳細な答えを更新しました。 – Myst

0

のstrlen(IBUF)

IBUFが整数であります、ストリングではありません。

+0

どうすればいいですか? –

関連する問題