【问题标题】:Ampersand '&' adds unnecessary characters和号 '&' 添加不必要的字符
【发布时间】:2015-11-24 20:17:39
【问题描述】:

我正在尝试将客户端套接字的字符发送到服务器套接字。当我在服务器端获取字符时,我会得到一些额外的字符和符号。任何人都可以建议我出了什么问题。在发送之前,我已经打印了字符,使用以下代码就可以了。

r_sendto(int sockfd, char buf, size_t len, int flags,
    const struct sockaddr *dest_addr, socklen_t addrlen) {
printf("\nMessage rec: %c", buf); //Message rec: h  
printf("Message rec: %s", &buf);  // Message rec: h�o�
int sendto_ret_val = sendto(sockfd, &buf, len, flags, dest_addr, addrlen);}

当我使用与号“&”时,为什么它会添加额外的符号。我必须使用“&”发送字符,而在接收方我得到了额外的符号,这给我带来了麻烦。任何人都可以清除我隐藏的逻辑&。提前致谢。

在接收部分我有以下代码:

char buffer[BUFSIZE];
r_recvfrom(socket_list[socket_index].sockfd, buffer, BUFSIZE, 0, (struct sockaddr *) &(socket_list[socket_index].brp_useraddr), &clntAddrLen);
puts(buffer); // it prints  h�w�

我很困惑,如何在接收端删除这些不需要的符号和字符。

【问题讨论】:

标签: c


【解决方案1】:

s 转换说明符需要指向字符串的指针,但 &buf 是指向字符的指针。根据定义,字符串是由第一个空字符终止并包括第一个空字符的连续字符序列

【讨论】:

    【解决方案2】:

    & 是 C 中的“地址”运算符。打印字符串时,它必须为空终止,否则您会遇到未分配给该字符串的内存(通常只是垃圾),并且可能会产生未定义的行为。如果您只需要发送一个字符,请创建一个大小为 2 的数组,其中您需要发送的字符位于位置 0,空字符位于位置 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多