C - извлечение строки запроса возвращает ошибку сегментации - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь придумать простую переносимую подпрограмму, которая в конечном итоге будет использоваться в настраиваемом модуле apache 2.2 (или даже более старом), поскольку я делаю специальный проект с участием древних компьютеров.

What I 'Я пытаюсь сделать это извлечь строку запроса из URL.Давайте предположим, что метод запроса - GET, а аргументы удалены из остальной части URL.

При запуске этой программы возникает ошибка сегментации.

Я считаю, что это происходит, когда я копирую токен во второй массив символов malloc'd, но я не понимаю, почему.Я знаю, что если я уберу этот strcpy вместе с двумя strsep внизу, я не получу ошибку сегментации.

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

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(){
  char str[]={"A=1&B=2&C=3"}; //my query string
  char delim[]={"&"}; //Delimiters are &
  char delim2[]={"="}; // and =
  char* rstr=malloc(1000); //allocate space for strsep
  char* rtok=malloc(1000); //allocate space for strsep
  strcpy(rstr,str); //Put our string in
  char* token;
  char* t;
  while ((token=strsep(&rstr,delim))!=NULL){
    //we have a token. Copy it over
    strcpy(rtok,token);
    //And split name and value
    t=strsep(&rtok,delim2);if(t){printf("N %s ",t);}
    t=strsep(&rtok,delim2);if(t){printf("V %s ",t);}
  }
  free(rstr);
  free(rtok);
}
...