Мой код прост ... он просто получает два предложения вроде 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-> порт и vc_node-> протокол
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
...
ПРОВЕРЬТЕ КОД