c - 如何使用 scanf 来限制用户输入不大于数组的字符串?

标签 c

如何使用scanf限制用户输入不大于数组的字符串?

到目前为止我尝试过的是:

#include<stdio.h>

int main()
{
const MAXSTRING = 5;

char arr[MAXSTRING] = {};

printf("Enter a string: \n");

scanf("%*s", MAXSTRING-1, arr);

return 0;
}

但这似乎行不通。

最佳答案

使用其中之一:

1 == scanf("%4s", arr)
1 == scanf("%4[^\n]", arr)
1 == scanf("%ms", &ptr) // POSIX 2008, remember to call `free`

第二个很有用,因为 scanf 以任何空格分隔“单词”的默认行为通常没有用。

但是,通常最好完全避免 scanf 并一次输入一行(使用类似 fgets 的东西(但要注意截断和 EOF-without-EOL)或 getline(POSIX 2008,但在 fgets 方面很容易实现)),然后在其上使用 sscanf 或简单的数组逻辑。

POSIX 引用:

关于c - 如何使用 scanf 来限制用户输入不大于数组的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29177451/

相关文章:

c - malloc不同方式的区别

C 保持运行信号数组排序

c++ - 如何在 cpp 源文件中链接静态库?

c++ - 将变量形式 make 移植到 Cmake

objective-c - 为什么将 C 函数声明为静态内联?

C/Linux : setgid leaves root in list of groups

c - 没有制定目标的规则

C编程文本文件不读取整行

c - gcc 在某些数组前/后增量情况下的奇怪行为(已编辑)

c - 不了解C中static int的功能