我遇到了试图传入和解析数据的问题。 具体来说,我需要通过UDP发送([Unsigned Char] [任意长度的字符串])。服务器应该能够解析这些信息。不幸的是,使用sscanf我没有运气。请帮忙!C中的UDP字符串解析问题
客户端代码:
char sendline[1000];
sendline[0] = (unsigned char)atoi(argv[3]); // Place Number at start of Buffer
sendline[1] = (' '); // Padding For Parsing
memcpy(&sendline[2], argv[4], sizeof(argv[4])); // Write String into Buffer after space
result = sendto(sockfd,&sendline,(sizeof(sendline)),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
服务器代码:
unsigned char test;
char strFirst [500];
char buff[1000];
len = sizeof(cliaddr);
n = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&cliaddr, &len);
buff[n] = '\0'; // Null Terminate
printf("%u %s\n", buff[0], &buff[2]); // Prints Fine
sscanf(buff, "%u %s", &test, &strFirst); // Attempted Parse of Data
printf("%u \n %s \n", test, strFirst);// Prints 0 and (null)
这可能是因为'sscanf()'不是该作业的合适工具。无论数据是6位还是10位,为什么发送1000个字节?你滥用'sizeof(argv [4])';你可能是指'strlen(argv [4])'。因为你没有正确地发送数据,你的接收器没有机会,是吗?或者,也许,您作为代码显示的内容并不是您真正用作代码的内容。 –
我还没有测试,但可能指针的问题? so .. sscanf(buff,“%u%s”,&test,strFirst)? 尝试使用gdb进行调试将是一个好主意。 – Sean83
我很欣赏你们俩的反馈。我在我的手机上,因此格式化可能会关闭。但Jonathan,你应该是strlen()而不是sizeof(),但我只是用它来测试。正如其他用户发布的,事实证明,我不应该按照你的建议使用sscanf()。所以谢谢! –