问题描述
- c语言在接收网络数据的溢出问题
-
代码如下:int main() { struct sockaddr_in addr, fromAddr; int socketd, linkSocketd, num; size_t size; char readData[1024] = {''}; addr.sin_family = AF_INET; addr.sin_port = htons(9900); addr.sin_addr.s_addr = INADDR_ANY; socketd = socket(PF_INET, SOCK_STREAM, 0); if(socketd == -1) { perror("socket"); return 1; } if(bind(socketd, (struct sockaddr*)&addr, 16) == -1) { perror("bind"); return 1; } listen(socketd, 20); linkSocketd = accept(socketd, (struct sockaddr*)&addr, &size); if(linkSocketd == -1) { perror("accept"); return 1; } size = sizeof(fromAddr); readSize = recvfrom(linkSocketd, (void*)&readData, sizeof(readData), 0, &fromAddr, &size); printf("接收到%d字节n", readSize); for(num = 0; num <readSize; num++) { printf("print_data[%d]:%xn", num, readData[num]); } return 0; }
结果:
接收到22字节
print_data[0]:68
print_data[1]:3a
print_data[2]:0
print_data[3]:3a
print_data[4]:0
print_data[5]:68
print_data[6]:ffffffc9
print_data[7]:ffffffff
print_data[8]:ffffffff
print_data[9]:1
print_data[10]:69
print_data[11]:0
print_data[12]:2
print_data[13]:73
print_data[14]:0
print_data[15]:0
print_data[16]:1
print_data[17]:0
print_data[18]:0
print_data[19]:0
print_data[20]:ffffffa7
print_data[21]:16
在第6、7、8、20元素的结果为何会出现这种情况?????
解决方案
char readData[1024] = {''};
修改为
unsigned char readData[1024] = {''};
看看
解决方案二:
你发送数据的代码是啥样的?不知道你发的数据长啥样,咋定位问题?
解决方案三:
上面caozhy回答的应该是正解:
unsigned char uc = 255;
printf("%xn", uc); // ff
char c = 255;
printf("%xn", c); // ffffffff
时间: 2024-09-20 11:56:37