scanf函数(“%MS”,&P)不工作OSX系统上(scanf(“%ms”, &p) not wo

2019-09-30 02:04发布

我想使用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(高塞拉利昂),这是行不通的:代码被执行,则scanf结果是0,它不会停止程序等待用户输入。

如果我做:

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

我看到有以下错误malloc

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

这是为什么?

Answer 1:

该手册页scanf()等为MacOS没有提到支持该特性。 它没有实现。 这是一个麻烦。 在Mac OS的POSIX的支持是令人沮丧偶尔会落后于时代。



文章来源: scanf(“%ms”, &p) not working on OSX system