Member 14684448 Ответов: 1

При токенизации строки, столкнувшейся с ошибкой сегментации, как ее устранить?


я маркирую строку следующим образом
Пример:1
оперативная память 1234 1:лазурь;1
Пример:2
оперативная память 1234 4:60

и я храню в одной структуре.я получаю ошибку сегментации

Что я уже пробовал:

я пытался вот так
int check_with_message_format(char *string)
{
        char *ptr=NULL;
        char delim[10] = {" :;"};
        int l=1;
        char username[10];
        char password[10];
        char value[15] = "Pooja";
        char value1[15] = "123";
        char *msg_str = string;
        printf("message arrived%s\n",msg_str);
        user_info user_msg_fmt;


        ptr = strtok(msg_str,delim);
                        while(ptr != NULL)
                        {
                        strcpy(user_msg_fmt.user_id, ptr );
                        printf("token1:%s\n",user_msg_fmt.user_id);
                        ptr = strtok (NULL, delim);
                        strcpy(user_msg_fmt.password, ptr );
                        printf("token2:%s\n",user_msg_fmt.password);
                        ptr = strtok (NULL, delim);
                        strcpy(user_msg_fmt.command, ptr );
                        printf("token3:%s\n",user_msg_fmt.command);
                        ptr = strtok (NULL, delim);
                        strcpy(user_msg_fmt.id_property, ptr );
                        printf("token4:%s\n",user_msg_fmt.id_property);
                        ptr = strtok (NULL, delim);
                        strcpy(user_msg_fmt.value, ptr );
                        printf("token5:%s\n",user_msg_fmt.value);
                        ptr = strtok (NULL, delim);
                        strcpy(user_msg_fmt.threshold, ptr );
                        printf("token6:%s\n",user_msg_fmt.threshold);
                        }
while(l <= USER_ID)
        {
                sprintf(username,"Username%d",l);
                get_xml_content(FILE_NAME,PARENT_NODE_1,username,value);
                if(strcmp(user_msg_fmt.user_id , value)==0)
                {
                        printf("valid user id:%s\n",value);
                        sprintf(password,"Password%d",l);
                        get_xml_content(FILE_NAME,PARENT_NODE_1,password,value);
                        if(strcmp(user_msg_fmt.password, value1)==0)
                        {
                                printf("valid password:%s\n",value);
                                check_with_the_SET_GET_command(user_msg_fmt);

                        }
                        break;
                }
                else
                        continue;
        }
   return SUCCESS;
}

как решить эту проблему?

CPallini

Этот код неполон. Например, в нем отсутствует определение "user_info user_msg_fmt". Пожалуйста, предоставьте полный код, чтобы получить лучшую помощь.

1 Ответов

Рейтинг:
0

OriginalGriff

Мы не можем сказать: у нас нет доступа к вашим данным или к вашему коду, пока он работает.
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Я бы начал с того, что посмотрел на user_msg_fmt и это подполя в отладчике, и посмотрите, что там происходит - мы даже не знаем, что содержит структура, а тем более как она объявлена!
Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!