例如...
char* foo;
scanf("%[^\n\r]", foo);
我如何在不包含C库的情况下使用C++实现这个功能?
char* foo;
scanf("%[^\n\r]", foo);
我如何在不包含C库的情况下使用C++实现这个功能?
char *foo
没有分配内存,这可能导致写入NULL或内存中的某个随机位置之外,你所发布的内容相当于以下内容:
等同于您发布的内容的是:
std::string foo;
std::getline(std::cin, foo);
对于更复杂的情况,您需要读取多个项目,可以使用以下任一方式:cin >> x >> y >> z;
或 std::getline(std::cin, str); std::stringstream ss(str); ss >> x >> y >> z;
- 或两种方式的组合。
但是在C++中,有效的C代码同样有效。这不总是“正确”的解决方案,但也绝不完全错误。
scanf
的C++版本是std::scanf
,可以在<cstdio>
头文件中找到。是的,这是同一个函数 - 因为C函数也可以在C++中使用。
有两种简单的方法可以替换scanf
。
std::cin
可在标准库中找到。
std::getline(std::cin, line);
将用户输入(不包括换行符)读入到一个std::string
类型的变量line
中。
std::istringstream
是std::basic_istringstream<char>
的一个 typedef。请参阅 C++98(ISO/IEC 14882:1998)§27.7.2,“模板类 basic_istreamstream”。 - Remy Lebeau