将C++字符串变量转换为long

kun*_*l18 6 c++ string long-integer

我有一个变量:

string item;
Run Code Online (Sandbox Code Playgroud)

它在运行时初始化.我需要将它转换为long.怎么做?我已经尝试过atol()和strtol()但是我总是分别对strtol()和atol()有以下错误:

cannot convert 'std::string' to 'const char*' for argument '1' to 'long int strtol(const char*, char**, int)'

cannot convert 'std::string' to 'const char*' for argument '1' to 'long int atol(const char*)'
Run Code Online (Sandbox Code Playgroud)

log*_*og0 19

C++ 11:

long l = std::stol(item);
Run Code Online (Sandbox Code Playgroud)

http://en.cppreference.com/w/cpp/string/basic_string/stol

C++ 98:

char * pEnd;.
long l = std::strtol(item.c_str(),&pEnd,10);
Run Code Online (Sandbox Code Playgroud)

http://en.cppreference.com/w/cpp/string/byte/strtol

  • @Nawaz:"不安全"有点夸张.它不允许您检查输入是否真的是数字字符串; 这个"安全"是否取决于它来自何处以及你正在做什么. (3认同)

小智 16

试试这样:

long i = atol(item.c_str());
Run Code Online (Sandbox Code Playgroud)

  • -1表示`long i = atol(item.c_str());`因为这个函数不安全! (5认同)
  • @tenfour:尝试这个:`cout << atoi("9879abc879xyz"); ` 看看它打印了什么! (2认同)
  • @tenfour:这是不安全的,因为它没有告诉你它没有*真正*转换*整个*字符串,并没有告诉你问题.这是不安全的,因为它没有告诉你这两个调用之间:`atoi("0")`和`atoi("abc")`.[都返回'0`](http://ideone.com/z62qj).:P (2认同)

yur*_*hek 5

使用std :: stol <字符填充空格>


App*_*ker 5

使用字符串流.

#include <sstream>

// code...
std::string text;
std::stringstream buffer(text);
long var;
buffer >> var;
Run Code Online (Sandbox Code Playgroud)