的scanf( “%MS”,&P)不工作OSX系统上

时间:2019-01-31 12:54:52

标签: c macos malloc scanf macos-high-sierra

我试图使用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(高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 :(得分:3)

scanf()等人的macOS手册页未提及对该功能的支持。尚未实施。这很麻烦。 macOS上对POSIX的支持有时令人沮丧地落后于时代。