Скопировать IP-адрес в буфер - PullRequest
0 голосов
/ 10 мая 2018

Я строю брандмауэр в C, и у меня есть следующая проблема.Я запрашиваю IP-адрес на стороне клиента и получаю 4 числа (октеты IP-адреса в четырехточечном формате с точками).Как в этом примере:

255.255.197.0

Я получаю эти 4 октета в данных типа Integer .Чтобы скопировать это в буфер из символов , я использую функцию sprintf(), но получаю ошибку сегментации.

char buffer[MAX_BUFF_SIZE];            // The buffer to save the IP address
bzero(buffer, sizeof(buffer));    // Clean the buffer

// Gets the address
int o1, o2, o3, o4;
do
{ 
  printf("Introduce the 4 octets of the IP address (dotted quad format).\n");
  printf("Numbers must go from 0 to 255.\n\n");

  valid = TRUE;
  printf("Introduce first octet (X.-.-.-): ");
  scanf("%d", &o1);
  printf("Introduce second octet (-.X.-.-): ");
  scanf("%d", &o2);
  printf("Introduce third octet (-.-.X.-): ");
  scanf("%d", &o3);
  printf("Introduce fourth octet (-.-.-.X): ");
  scanf("%d", &o4);
  if (o1 < 0 || o1 > 255 || o2 < 0 || o2 > 255 || o3 < 0 || o3 > 255 || o4 < 0 || o4 > 255)
  {
    printf("Error [Client]: Invalid number.\n");
    valid = FALSE;
  }
} while (valid == FALSE);

// When octets are valid
sprintf(buffer, "%d.%d.%d.%d", o1, o2, o3, o4); // Copy the address in String format in buffer
inet_aton(buffer, &my_rule.addr);
printf("The IP address is %s\n", my_rule.addr);

o1, o2, o3 и o4 - это 4 октета адреса.Любая идея о том, как я могу поместить эти целые числа в буфер char?

1 Ответ

0 голосов
/ 10 мая 2018

Это не имеет смысла:

  printf("The IP address is %s\n", my_rule.addr);

Спецификатор преобразования s ожидает адрес первого элемента 0 -определенного массива char, строки "C".

Код (скорее всего, так как вы его не показываете) передает struct in_addr.

Компилятор должен был предупредить вас об этом.


И кстати, вы знаете, что 255.255.197.0 это не действительный IP-адрес, не так ли?

...