gpt4 book ai didi

c - 为什么采用 char 指针指针的函数不起作用?

转载 作者:行者123 更新时间:2023-11-30 18:37:23 25 4
gpt4 key购买 nike

我被困住了,不明白为什么这个函数代码不能正常工作。该代码来自 irc 客户端向服务器发送数据。

此代码有效:

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

最佳答案

第二个版本失败,因为您将 *str 指向 encode 函数本地的缓冲区。当函数返回时,局部变量将不再存在,除非它们被标记为static。因此,当代码到达 int n = write(sockfd, msg, strlen(msg)) 时,msg 是一个悬空指针。

一个修复方法是在 write_socket 函数中声明 buffer,并将缓冲区传递给 encode

关于c - 为什么采用 char 指针指针的函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com