这是什么意思“scanf(”%[^ \ n]“,buf);” ?它的等效C ++语法是什么?

时间:2014-10-12 14:28:21

标签: c scanf

我是C编程语言的新手。我已经用C ++做了一些编程,我知道scanf用于获取输入,\n表示下一行,但我无法理解完整的表达式。 什么是等效的C ++语法?

1 个答案:

答案 0 :(得分:2)

这意味着“在遇到行尾字符之前读取所有内容,并将结果存储在提供的char*指针中”。等效的C ++语法完全相同(您需要包含<cstdio>),但在C ++中,您应该更喜欢基于字符串的API scanf

string buf;
getline(cin, buf);

原因是scanf具有您提供的格式字符串容易出现缓冲区溢出:如果最终用户输入的字符数多于buf,C或C ++的大小继续将数据写入内存,导致未定义的行为。您可以修复格式字符串(强烈推荐)以将输入限制为缓冲区的大小,如下所示:

char buf[100];
scanf("%99[^\n]", buf);

但现在您只能使用99个字符或更少的字符串。另一方面,std::getline std::string不受此限制。

相关问题