C 手动终止字符串的NUL
以下是我的服务器端的方法:C 手动终止字符串的NUL,c,string,C,String,以下是我的服务器端的方法: 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,
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,»»»»»不合逻辑的请求。\0”)代码>
套接字设置正确,send_头
和send_参数
方法工作正常
在服务器端,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));
}
正如评论中所暗示的,我的错误是操纵了strlen。我只需要添加一个+1
@AlexF我已经发布了我(你)的答案。如果你想发布一个,我会优先接受你的。如果是\0
,应该拼写为nul
(1 el),如果是空指针,则拼写为字符和NULL
/NULL。@PSkocik你是指标题吗?好评论。我改了。