【发布时间】:2013-12-15 15:44:49
【问题描述】:
我有两段代码,我认为它们的工作方式完全相同:
if (ntohs(tcp_hdr->tcp_dport)==80) {
char * parser = strtok(string,";;");
while (parser != NULL){
char parvar[100];
strcpy(parvar, parser);
if(parvar[0] == 'H' && parvar[1] == 'o' && parvar[2] == 's' && parvar[3] == 't') {
char * substr = extract(parvar, 6, strlen(parvar));
visited_hosts[hosts_counter] = substr;
hosts_counter++;
}
parser = strtok(NULL, ";;");
}
bytes_sent += ((ip_hdr->ip_ttl)-40);
}
和
if (ntohs(tcp_hdr->tcp_sport)==80) {
char * parser = strtok(string,";;");
while (parser != NULL){
char parvar[100];
strcpy(parvar, parser);
if(parvar[0] == 'L' && parvar[1] == 'o' && parvar[2] == 'c' && parvar[3] == 'a') {
char * substr = extract(parvar, 10, strlen(parvar));
visited_pages[pages_counter] = substr;
pages_counter++;
}
parser = strtok(NULL, ";;");
}
bytes_received += ((ip_hdr->ip_ttl)-40);
}
我有 while(1) 侦听器,第一段代码工作正常,但第二段代码在完成任务后因分段错误退出循环。我无法使用 gdb,因为我正在使用 QEMU 来测试我的解决方案。你们知道可能是什么问题吗,或者我还能用什么来调试 QEMU 中的 c 代码?
【问题讨论】:
-
当你制作“strcpy(parvar, parser);” parser 在两个选项中是否具有相同的值?
标签: c parsing segmentation-fault qemu