首页 > 解决方案 > 打印出具有给定子字符串的链表的所有元素

问题描述

我正在尝试创建一个函数,您可以使用给定的子字符串打印出包含它的所有元素。从理论上讲,我认为可以通过使用 printAll 函数并将其转换为不是全部打印,而是只打印包含子字符串的元素。但相反,我得到了分段错误。我错过了什么?

服务器

void printSub(char sub[101], int *data_socket) {
    struct phonebook *ptr = head;
    
   while(ptr != NULL) 
   {
       if(strstr(sub, ptr->first_name) != NULL || strstr(sub, ptr->last_name) !=  NULL || strstr(sub, ptr->phone_number) != NULL)
      {
      printf("(%s ",ptr->first_name);
      write(data_socket, ptr->first_name, 31);
      printf("%s ",ptr->last_name);
      write(data_socket, ptr->last_name, 31);

      printf("%s) ",ptr->phone_number);
      write(data_socket, ptr->phone_number, 31);

      printf("\n");
      ptr = ptr->next;
       }
    else{
        ptr = ptr->next;
    }
   }
}
// part of if statement where the code executes when user requests a search with given substring
else if(strcmp(data_char_array, "search" == 0)){

                return_value = read(client_info,phone_char_array,101);
                phone_char_array[return_value] = 0;
                write(client_info, "searching", 11);
                printList(phone_char_array, client_info);
            }

客户

    while(1)
    {
      
        return_value = write(data_socket, send, strlen(send));
        if (return_value == -1) 
        {
            perror("Error occurred while sending! Error at 0x1!");
            exit(-1);
        }

        return_value = write(data_socket, argv[1], strlen(argv[1]));
        if (return_value == -1) 
        {
            perror("Error occurred while sending! Error at 0x2!");
            exit(-1);
        }
      
        return_value = read(data_socket, recieve, 11);
        recieve[return_value] = 0;
        printf("Searching substring: %s\n", recieve);
        if(strcmp(recieve, "searching") == 0)
        {
            return_value = read(data_socket,name,31);
            name[return_value] = 0;
            printf("%s ", name);
            return_value = read(data_socket,last,31);
            last[return_value] = 0;
            printf("%s ", last);
            return_value = read(data_socket,phone,101);
            phone[return_value] = 0;
            printf("%s ", phone);
            printf("Search was successful\n");

标签: csocketswhile-loopsegmentation-fault

解决方案


推荐阅读