fprintf(fp,"IP: %d: %.*s\n",
ip,
strstr(strstr(p->data, "User-Agent:"),"\n") - strstr(p->data, "User-Agent:"),
strstr(p->data, "User-Agent: "));
fclose(fp);
안녕하세요. 위의 문장에서 볼 수 있듯이, char 포인터에서 사용자 에이전트 헤더 만 씁니다. 전체 http 패킷 데이터를 포함합니다. 문제는 문자열 형식을 다루고 난 후,이 %. * 형식을 사용하여 파일에 인쇄 할 문자 수를 동적으로 선택한 다음 인쇄합니다. 코드는 기본적으로 int를 출력하고 나서 "User-Agent :"가 발생했을 때부터 다음에 나오는 새 줄 문자까지의 문자 수를 넘기 때문에 문자 양이 시작됩니다 전체 패킷 데이터 문자열에서 "User-Agent :"가 시작되는 위치. 나는 그것이 모두 지저분하다는 것을 알고있다. 그러나 그것은 잘 동작하고있다. 그것은 sprintf에서 작동하지 않는 것을 제외하고.문자열 형식은 fprintf에서 작동하지만 sprintf에서 작동하지 않습니다. 세그먼트 화 오류가 발생합니다.
제 힘겨운 말을 모두 저장하십시오! 어떤 도움을 주셔서 감사합니다!
char *stat;
sprintf(stat,"%.*s\0",
strstr(strstr(p->data, "User-Agent:"),"\n") - strstr(p->data, "User-Agent:"),
strstr(p->data, "User-Agent: ")) ;
동일한 인수를 사용하여 동일한 'strstr'을 3 회 호출하면 부끄러운 일입니다. 알다시피, 그것은 다소 비싼 기능입니다. –
@Jan :하지만 조기 최적화는 모든 악의 뿌리입니다. 이와 같이 복사하여 붙여 넣는 코드를 작성하지 않은 것이 더 낫지 만 유지하기가 덜 강력하고 어렵다는 것입니다. –
@ Paul R : 네, 유지 보수성 역시 좋은 논거입니다. "조숙 한 최적화"와 관련하여, 조기 최적화는 입증되지 않은 이익을 위해 코드가 더 복잡하지만 코드를 더 간단하고 읽기 쉽게 만드는 것입니다. –