Перевести небольшую функцию с C на PHP - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Помогите, пожалуйста. В C не разбираюсь, но надо реализовать одну функцию на php. Сама функция из библиотеки curl. Вот она:
static bool tailmatch(const char *cooke_domain, const char *hostname)
{
  size_t cookie_domain_len = strlen(cooke_domain);
  size_t hostname_len = strlen(hostname);
 
  if(hostname_len < cookie_domain_len)
    return FALSE;
 
  if(!Curl_raw_equal(cooke_domain, hostname+hostname_len-cookie_domain_len))
    return FALSE;
 
  /* A lead char of cookie_domain is not '.'.
     RFC6265 4.1.2.3. The Domain Attribute says:
       For example, if the value of the Domain attribute is
       "example.com", the user agent will include the cookie in the Cookie
       header when making HTTP requests to example.com, [url]www.example.com[/url], and
       [url]www.corp.example.com[/url].
   */
  if(hostname_len == cookie_domain_len)
    return TRUE;
  if('.' == *(hostname + hostname_len - cookie_domain_len - 1))
    return TRUE;
  return FALSE;
}
И функция Curl_raw_equal:
/*
 * Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
 * to be locale independent and only compare strings we know are safe for
 * this.  See [url]http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/[/url] for
 * some further explanation to why this function is necessary.
 *
 * The function is capable of comparing a-z case insensitively even for
 * non-ascii.
 */
 
int Curl_raw_equal(const char *first, const char *second)
{
  while(*first && *second) {
    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
      /* get out of the loop as soon as they don't match */
      break;
    first++;
    second++;
  }
  /* we do the comparison here (possibly again), just to make sure that if the
     loop above is skipped because one of the strings reached zero, we must not
     return this as a successful match */
  return (Curl_raw_toupper(*first) == Curl_raw_toupper(*second));
}
char Curl_raw_toupper(char in)
{
  switch (in) {
  case 'a':
    return 'A';
  case 'b':
    return 'B';
  case 'c':
    return 'C';
  case 'd':
    return 'D';
  case 'e':
    return 'E';
  case 'f':
    return 'F';
  case 'g':
    return 'G';
  case 'h':
    return 'H';
  case 'i':
    return 'I';
  case 'j':
    return 'J';
  case 'k':
    return 'K';
  case 'l':
    return 'L';
  case 'm':
    return 'M';
  case 'n':
    return 'N';
  case 'o':
    return 'O';
  case 'p':
    return 'P';
  case 'q':
    return 'Q';
  case 'r':
    return 'R';
  case 's':
    return 'S';
  case 't':
    return 'T';
  case 'u':
    return 'U';
  case 'v':
    return 'V';
  case 'w':
    return 'W';
  case 'x':
    return 'X';
  case 'y':
    return 'Y';
  case 'z':
    return 'Z';
  }
  return in;
}
Я не прошу вас переписать мне всё это на php. Но объясните хотя бы, что значит вот это (21я строка 1го листинга):
*(hostname + hostname_len - cookie_domain_len - 1)
Почему строку

hostname

суммируют с числом

hostname_len

(и дальнейшая арифметика)? Что это даёт? Зачем всё это обрамлять в скобки ставить перед ними звёздочку? Как из этого выражения может получиться точка? Я правда не бум-бум( Надеюсь на понимание и вашу помощь! :-)

Решение задачи: «Перевести небольшую функцию с C на PHP»

textual
Листинг программы
void PrintString( const char *str)
{
   puts(str);
}
...............................
char str[] = "Hello World"; 
    PrintString(str + 6);

Объяснение кода листинга программы

  1. В данном коде представлена небольшая функция с названием PrintString, которая принимает в качестве аргумента указатель на строку символов (константный указатель на char).
  2. Внутри функции происходит вызов функции puts, которая выводит на экран информацию, содержащуюся в переданном указателе.
  3. В основной части кода создается массив символов (строка) с названием str, содержащий 12 символов, включая символы новой строки в конце и начале строки.
  4. Затем происходит вызов функции PrintString с аргументом str + 6, что приводит к передаче в функцию указателя на 7-й символ строки str.
  5. Функция PrintString выводит на экран символы, на которые указывает переданный указатель, в данном случае - World.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы