Я пытаюсь использовать функцию 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
Почему это так?