c++ - C++ 中的 getline(isstream, string)

标签 c++ getline

<分区>

我正在努力学习C++,但仍然不断遇到愚蠢的问题,因为我还不熟悉C++库,以及常见错误等。

现在,我的以下代码片段失败了:

#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>

void getInt(int & val){
    string output;
    getline(cin output.c_str());
    val = atoi(output.c_str());
}

当我尝试编译它时给我这个错误:

test.cpp: In function void getInt(int&):
test.cpp:51: error: expected ) before output
test.cpp:51: error: no matching function for call to getline(std::istream&)

我做错了什么?我觉得我错过了一些明显的东西。

最佳答案

应该是

getline(cin, output); // comma, no .c_str()

如果您执行 .c_str(),当您尝试将数据读入只读时,您将调用未定义的行为em> 内存区域。那是一些糟糕的魔力。当然,正如 Lightness 在评论中指出的那样,它甚至无法编译,因为 c_str()const char*getline() 需要一个 char*(非 const)(但即使您设法让它编译,了解未定义的行为也很重要)。

关于c++ - C++ 中的 getline(isstream, string),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044197/

相关文章:

c++ - 无法读取 C++ 中的文本文件

使用原型(prototype)后 C 中的冲突类型错误

C++:将两个数组传递给一个函数,但结果不是我所期望的

c++ - 这个嵌套数组是使用栈内存还是堆内存?

c++ - C++ 中的运行时内存分析

c++ - 复制命令/Powershell 窗口屏幕缓冲区

c++ - 如何在 C++ 的同一行上两次 getline()?

c++ - 是否有可能让 getline() 函数接受 wistream&

c++ - Release模式下的访问冲突

c++ - 使用 getline、strcpy、strtok c++ 加载 .txt 文件时出现运行时错误