gpt4 book ai didi

c - NUL——手工终止一个字符串

转载 作者:太空狗 更新时间:2023-10-29 15:31:14 24 4
gpt4 key购买 nike

这是我服务器端的方法:

void send_err(int socket_fd, char *msg) {
/// To send an error message (`ERR`).

size_t len = strlen(msg);
printf("send_err: msg='%s' of size:%zu\n", msg, len);


INIT_HEAD_S(head_s, ERR, len);
send_header(socket_fd, &head_s, sizeof(cmd_header_t));
send_msg(socket_fd, msg, len * sizeof(char));
}

我这样调用方法:send_err(socket_fd, "»»»»»»»» 不合逻辑的 REQ 请求。\0");

套接字设置正确,send_headersend_args 方法工作正常。

在服务器端,printf 工作得很好,但是 strlen 没有返回正确的值(应该是 33 ,但它给出的是 43

在客户端,收到的消息是不确定的:有时会出现奇怪的额外字符。显然,手动添加 \0 似乎并没有在我的字符串末尾实际添加 NUL 字符。

我应该怎么做? 我希望该方法不要求用户计算他们发送的字符数,因为这样做很烦人。

最佳答案

void send_err(int socket_fd, char *msg) {
/// To send an error message (`ERR`).

size_t len = strlen(msg)+1; // because `strlen` doesn't include the NUL char
printf("send_err: msg='%s' of size:%zu\n", msg, len);


INIT_HEAD_S(head_s, ERR, len);
send_header(socket_fd, &head_s, sizeof(cmd_header_t));
send_msg(socket_fd, msg, len * sizeof(char));
}

作为Alex F在评论中建议,我的错误是对 strlen 的操作。我只需要添加一个 +1

关于c - NUL——手工终止一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55234350/

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