fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdint.h>
  4. #include <stddef.h>
  5.  
  6. #define LIBKODIK_PARAMS_TYPES_START 7 /* Длина начала параматра в строке `type=` */
  7. #define LIBKODIK_PARAMS_TYPES_NO_VALUE 42 /* Позиция в строке, если парамерт необходимо удалить полностью */
  8. #define LIBKODIK_PARAMS_TYPES_MAX 12 /* Максимально возможное кол-во параметров для type=... */
  9. #define LIBKODIK_PARAMS_PRINTF_LENGTH_STRING 3 /* Размер `%s,` */
  10.  
  11. void
  12. libkodik_api_countries_param_types_remove_unusable_values(char *psz_value, uint8_t i_count) {
  13. size_t const s_strlen = strlen(psz_value);
  14. char buffer[s_strlen];
  15. (void) strcpy(buffer, psz_value);
  16. if (0 == i_count) { /* Кол-во параметров равно нулю? Просто срезает от и до */
  17. (void) memcpy
  18. (
  19. psz_value,
  20. &buffer[LIBKODIK_PARAMS_TYPES_NO_VALUE],
  21. s_strlen - LIBKODIK_PARAMS_TYPES_NO_VALUE + 1
  22. );
  23. return;
  24. }
  25. (void) memmove
  26. (
  27. &psz_value[LIBKODIK_PARAMS_TYPES_START],
  28. &buffer[LIBKODIK_PARAMS_TYPES_START] + (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count)),
  29. s_strlen - (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count) + 1)
  30. );
  31. }
  32.  
  33. int main(void) {
  34. char buffer_flags[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
  35. char buffer_flags2[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
  36. uint8_t i_flags_count = 4;
  37. if (12 != i_flags_count) {
  38. libkodik_api_countries_param_types_remove_unusable_values(buffer_flags, i_flags_count);
  39. }
  40. printf("Changed: %s\n", buffer_flags);
  41. printf("Original: %s\n", "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s");
  42. i_flags_count = 0;
  43. if (12 != i_flags_count) {
  44. libkodik_api_countries_param_types_remove_unusable_values(buffer_flags2, i_flags_count);
  45. }
  46. printf("Changed2: %s\n", buffer_flags2);
  47. printf("Original2: %s\n", "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s");
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0s 4328KB
stdin
Standard input is empty
stdout
Changed:   types=%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s
Original:  types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s
Changed2:  year=%lu&translation_id=%lu&translation_type=%s&sort=%s
Original2: types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s