我的代码很简单...它只得到两个句子,如networkService(webServer, httpd,TCP, 80, apache)
和hacl(internet, webServer, TCP, 80)
。代码仅从这两个句子中提取每个句子的协议和端口。
因此,对于句子networkService(webServer, httpd,TCP, 80, apache)
,协议将为TCP
,端口为80
对于句子hacl(internet, webServer, TCP, 80)
,协议应为TCP
,端口为80
这就是我所有的代码,执行后出现段错误...这是我的以下代码:
此功能的全部作用是在第一个逗号之后获取协议,并在第三个逗号之后获取端口
void set_port_service(char node_name[], char protocol[], char port[]){
char* sep;
sep = node_name;
int comma_num = 0;
int i = 0; int k =0;
printf("node name: %s\n\n", node_name);
while(comma_num < 4){
if(*sep == ',')
comma_num++;
sep++;
if(comma_num == 2){
if(*sep != ',' && *sep != ')'){
protocol[i] = *sep;
i++;
}
}
if(comma_num == 3){
if(*sep != ',' && *sep != ')'){
port[k] = *sep;
k++;
}
}
}
protocol[i] = 0; port[k] = 0;
remove_char(protocol);
remove_char(port);}
下面的所有功能是从上一个功能获取协议和端口并将其添加到vc_node-> port和vc_node-> protocol
void convert_to_dag(graph_node** dag, graph_node** sag){ //directed acyclic graph
struct Graph_Node data = { .next = NULL, .edge = NULL, .hosts = NULL, .predecessor_edge = NULL, .parent_list = NULL};
graph_node* sag_aux = *sag;
while(sag_aux != NULL){ //set vc nodes ports and services
// service leaf node
if(strstr(sag_aux->node_name, "networkServiceInfo") || strstr(sag_aux->node_name, "hacl")){
//printf("\n\nnode name: %s\n\n", sag_aux->node_name);
graph_edge* edge_aux = sag_aux->edge;
printf("Part 1\n\n");
while(edge_aux != NULL){
char protocol[50]; char port[50];
memset(protocol, 0, sizeof(protocol)); memset(port, 0, sizeof(port));
set_port_service(sag_aux->node_name, protocol, port); //extract port and protocol from leaf node
graph_node* vc_node = edge_aux->node; // leaf pointing to vc node
strcpy(vc_node->protocol, protocol); strcpy(vc_node->port, port); //copy to vc node
edge_aux = edge_aux->next;
}
printf("protocol: %s ", sag_aux->edge->node->protocol);
printf("port: %s\n\n",sag_aux->edge->node->port);
printf("Part 2\n\n");
}
sag_aux = sag_aux->next;
}
sag_aux = *sag;}
在执行代码后出现段错误。只是没有任何意义...没人知道原因吗?
导致分段错误的代码部分是strstr(sag_aux->node_name, "hacl")
语句中的这个if
...