我试图使用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
那是为什么?
答案 0 :(得分:3)
scanf()
等人的macOS手册页未提及对该功能的支持。尚未实施。这很麻烦。 macOS上对POSIX的支持有时令人沮丧地落后于时代。