下面的循环调用了parseXML()
函数:
...
char buffer[MAX_BUFSIZE];
memset(buffer, 0, sizeof(buffer));
int bytes_received = tcp_read(socket, buffer, sizeof(buffer));
...
int bytes_read_total = 0;
while (bytes_read_total < bytes_received) {
int bytes_read = 0;
Person* person = parseXML(buffer, bytes_received - bytes_read_total, &bytes_read);
if (person == NULL) break;
bytes_read_total += bytes_read;
savePerson(person);
}
这里是parseXML()
函数的开始:
Person* parseXML(char* buffer, int bufSize, int* bytesRead) {
char* startTag = strstr(buffer, "<person>");
char* endTag = strstr(buffer, "</person>");
if (startTag == NULL || endTag == NULL) {
return NULL;
}
Person* person = newPerson();
int personLength = endTag + strlen("</person>") - startTag;
char* personBuffer = (char*)malloc(personLength + 1);
memcpy(personBuffer, startTag, personLength);
personBuffer[personLength] = '\0';
...
free(personBuffer);
*bytesRead = personLength + 1;
return person;
当前使用strstr()
时,它总是在每次迭代中查找xml中的第一个人,而不是从bytesRead偏移量开始搜索。请让我知道如何解决这个问题。
1条答案
按热度按时间rsl1atfo1#
strstr
接受一个char指针作为它的第一个参数,当它到达一个空字符(字符串结束)时停止搜索。指针可用于算术运算,例如:
因此,要使用
strstr
从偏移量开始搜索字符串,您需要做的就是递增指针:当
strstr
没有找到子字符串时,它返回一个NULL指针。您可以执行以下操作来检查是否找到子字符串: