我遇到了試圖傳入和解析數據的問題。 具體來說,我需要通過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()。所以謝謝! –