私は立ち往生しており、なぜこの機能コードが正しく動作しないのか分かりません。コードは、サーバーにデータを送信するircクライアントからのものです。なぜ関数ポインタがcharポインタポインタを受け取っていないのですか?
このコードは動作します:
void write_socket(char msg[512]) {
//////// Convert from unicode to encoding ////////
iconv_t cd = iconv_open(encoding, "UTF-8");
char buffer[512];
char *outptr = (char *) &buffer[0];
size_t insize = 512;
size_t outsize = 512;
iconv(cd, &msg, &insize, &outptr, &outsize);
msg = buffer;
printf("(%lu) msg: %s\n", strlen(msg), msg);
int n = write(sockfd, msg, strlen(msg));
if (n < 0)
error("Error writing to socket");
}
私はwrite_socket("NICK kiyoshi\r\n");
を呼び出すときには、この出力できます:(14) msg: NICK kiyoshi
をしてサーバーに正常に接続します。
このコードは動作しません:
void write_socket(char *msg) {
encode(&msg, 512);
printf("encode: (%lu) msg: %s\n", strlen(msg), msg);
int n = write(sockfd, msg, strlen(msg));
if (n < 0)
error("Error writing to socket");
}
void encode(char **str, int size) {
if (*encoding) {
//////// Convert from unicode to encoding ////////
iconv_t cd = iconv_open(encoding, "UTF-8");
char buffer[size];
char *outptr = (char *) &buffer[0];
size_t insize = size;
size_t outsize = size;
iconv(cd, &(*str), &insize, &outptr, &outsize);
*str = buffer;
}
}
私はwrite_socket("NICK kiyoshi\r\n");
呼び出すときには、この出力付与するものではありません:encode: (14) msg:
をし、決してサーバーに接続します。
charポインタの何が問題ですか?私は関数encode
を使用したいと思います。
あなたが気づいていない場合、 'char * msg'はその文脈で' char msg [512] 'とまったく同じ意味です –
@MMはい、' char msg [512] 'としていましたが、変換後に 'iconv_close(cd)'を呼び出す必要がありますか? – jackcogdill
実際には、 'iconv'の戻り値をチェックしていません。 – t0mm13b