c ++错误:无法转换basic_string <char>}&#39;到#char; char *&#39;争论&#39; 1&#39; to to long int strtol

时间:2017-03-12 02:08:23

标签: c++ string c++11

我是C ++的新手,虽然在C中编程了一段时间。 尝试读取字符串,然后使用strtol将字符串转换为int。 我使用gcc编译器。 并且我收到以下错误消息:&#34; c ++错误:无法转换&#39; std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string}&#39;到#char; char *&#39;争论&#39; 1&#39; to&#39; long int strtol(const char *,char **,int)&#39; int c = strtol(str [j],&amp; p,10);&#34;。 我尝试了不同类型的转换,但非常喜欢strtol以供将来参考。我的矢量字符串有什么用处吗?

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

using namespace std;
using std::string;

int main()
{
  int a = 0;
  int i = 0;
  int size = 0;
  int* big;

  cin>>a;
  size = a*2;

  int sizes[size];
  string *str = new string[size];
  while(i < a){
    cin>>str[i];
  i++;
}

i = 0;
while(i < a){
  cout << str[i] << endl; // just for checking
  i++;
}



for (int j =0; j<size-1;j++){
  char* p;
  char* q;
  int c = strtol(str[j], &p, 10);
  if (!*p) {
     sizes[j] = *p;
  }else{
     sizes[j] = *p/2;
  }
}

return 0;
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用strtol(str[j].c_str(), &p, 10);对c_str()的调用会返回指向字符串对象内容的const char*strtol需要const char*。或者您可以编写更多惯用代码,并致电std::stol(str[j])