scanf ("% ms", & p) не работает в системе OSX - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь использовать функцию scanf("%ms, &p) в следующем коде.

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

int main()
{
    char *p;
    int n;

    n = scanf("%ms", &p);
    if (n == 1) {
      printf("read: %s\n", p);
      free(p);
    }
    else {
      printf( "%d, No matching characters\n", n);
    }
    return 0;
}

Это должно динамически распределять память, избегая переполнения буфера.Синтаксис %ms должен быть для систем POSIX.Однако в OSX (High Sierra) это не работает: код выполняется, результат scanf равен 0, и это не останавливает программу для ожидания ввода пользователя.

Если я это сделаю:

if (n == 0) {
  printf("read: %s\n", p);
  free(p);
}

Я вижу, что в malloc есть следующая ошибка:

malloc: *** error for object 0x7ffeeb91f9c8: pointer being freed was not allocated

Почему это так?

1 Ответ

0 голосов
/ 31 января 2019

На странице руководства для scanf() и др. Для macOS не упоминается поддержка этой функции.Это не реализовано.Это неприятность.Поддержка POSIX в macOS иногда отстает от времени.

...