&符号&'&添加不必要的字符

时间:2015-11-24 20:17:39

标签: c

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

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�

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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