将指针与getline()函数一起使用
use of pointer with getline() function
char *p;
cout << "Enter the string and press ENTER: ";
cin.getline(p,delimiter);
此代码应该如何工作,例如从编译器的角度来看。我的意思是字符指针应仅具有一个字符,但是当我运行此代码时,字符需要到定界符。在这里,定界符可能是任何INT。 EX-2,10,1200 。
它应该显示编译器错误,您没有将内存分配给炭指针,但它编译了
应该显示编译器错误,您没有将内存分配给 炭指针,但它编译
编译器通常无法做到这一点。考虑您对您的示例的改编:
int size;
std::cin >> size;
char *p = new char[size];
cout << "Enter the string and press ENTER: ";
cin.getline(p,delimiter);
在这里您可以分配内存,但是直到程序运行并输入了一些数字,才知道多少。
如果您想在C 中发展,则必须了解未定义的行为是编程错误的有效,常见和风险的结果。
您假设编译器可以或应该找到所有错误在C 的世界中既不正确也不理想。
应对这一现实的方法包括:
- 谨慎。
- 启用更多编译器警告。
- 不要忽略编译器警告。
- 更喜欢安全的标准组件,例如
std::getline
和std::string
,它们的产生不确定的行为的方法较少。 - 经常使用
assert
。
char *p;
cout << "Enter yes or no ";
cin >> p;
这就是您获得char
的方式。
至于您的问题,以这种方式考虑,如果您使用的是getLine()
,那么您正在阅读给定界符的整个行。您没有指定如果输入中不存在白空间定界符,则要读取哪个char
。
如果您想在输入中找到字符,则可以使用查找功能或getLine(p,"insert char you are looking for here"
,或者想要第一个char
,则有一个内置的find_first_of function
。
相关文章:
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- 将新放置与 std::函数一起使用不起作用
- C++ 如何将关键字"friend"与两个类的成员函数一起使用 相互包含
- 为什么引用不能与编译时函数一起使用?
- 将自动类型化 lambda 与模板化函数一起使用 - 在 g++ 5.4 中使用自动模板推导
- 我们可以将 Rcpp 与多个C++函数一起使用吗?
- 反转 C++ 中的 std::string 如何与此构造函数一起使用?
- 是否可以在C++中将两个函数一起添加
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 如何将两个类成员函数与同一类中的另一个函数一起添加
- 我可以将CRTP与虚拟函数或函数一起使用,以供访问者算法更改的访问者算法
- 将指令与模板化成员函数一起使用
- 如何将提升regex_replace与 lambda 函数一起使用
- 为什么复制构造函数与移动构造函数一起调用?
- 将指针与getline()函数一起使用
- 将GoogleTest与通过STD :: CIN从用户输入的函数一起使用
- GCC 中的编译器错误,但在将 decltype 与具有尾随返回类型语法的模板化成员函数一起使用时没有 clang
- 将异步与多态成员函数一起使用
- 将 argv 与函数一起使用时出错
- 为什么 void 以这种方式与内联函数一起使用