1

次のシグネチャを持つメソッドを呼び出す必要があります。

int sendTo(const void* buffer, int length, const SocketAddress& address, int flags=0);

  • 私の最初の質問は次のとおりです。

    とはどういうconst void* buffer意味ですか? 私の意図は、それが何かを指すことができる定数(変更不可能な)ポインターであることを意味します。これは何とか正しいですか?

  • 2 番目の質問:

このメソッドの目的は、明らかに、ソケットを介してデータを送信することです。最初のパラメータはデータで、2 番目のパラメータはそのデータの長さです。文字列「hello」を最初のパラメーターとして渡したい場合、どうすればよいですか?

私の考え:

char hello_str[1024] = "hello"
socket.sendTo(hello_str, sizeof(hello_str),.....);

これは機能しますか?しかし、この方法では、char 配列が大きすぎます。
適切なサイズの配列を作成するにはどうすればよいですか?

4

5 に答える 5

5

これは、何かを指すことができる定数 (変更不可能な) ポインターであることを意味します。

いいえ、そうvoid *constです。これはむしろ、ポインター先 (「何か」自体) を変更できない、何かへのポインターです。

これは機能しますか?

はい、セミコロンがないことを除けば。

適切なサイズの配列を作成するにはどうすればよいですか?

char hello_str[] = "hello";

あるいは

const char hello_str[] = "hello";
于 2013-08-08T07:00:48.910 に答える
1

とはどういうconst void* buffer意味ですか?

これは型指定されていないポインターです (これは、何でも指すことができるという別の言い方です)。それが指している値は変更できません (完全に正しいとは言えませんが、少なくともそれを見たときに考えるべきことです)。ただし、ポインター自体は変更できます。

const void * buffer = &a;
buffer = &b; // this is valid!

それに加えて、関数呼び出しは完全に正しいです。

于 2013-08-08T07:04:04.720 に答える
1

最初の質問: H2C03 は正しいですvoid * const。ポインターが変更されないようにするには、型を be にする必要があります。

2 番目の質問: 実行内容に応じて、いくつかのオプションがあります。以下に、動作する 2 つの例を示します。

char hello_str[] = "hello"
socket.sendTo(hello_str, sizeof(hello_str)-1,...);
socket.sendTo(hello_str, strlen(hello_str),...);

sendto の最初の呼び出しでは、コンパイル時に文字列のサイズを計算しています。文字列の末尾にヌル終了文字を送信しないようにするために、1 を減算します。strlen2 番目のケースでは、C および C++ で利用可能な標準関数を呼び出して実行時に計算しています。

于 2013-08-08T07:00:54.933 に答える
1

できるよ :

const char hello_str[] = "hello"; // Don't forget the const
socket.sendTo(hello_str, sizeof(hello_str)-1,.....);
// or socket.sendTo(hello_str, strlen(hello_str),.....);

あなたの質問に答えるには:

const void* バッファとは正確にはどういう意味ですか? 私の意図は、それが何かを指すことができる定数(変更不可能な)ポインターであることを意味します。これは何とか正しいですか?

いいえ、そうvoid* constです。const void*変更できないポインティであることを意味します。

あなたはこれを読むかもしれません。

于 2013-08-08T07:01:59.337 に答える