无法将字符串转换为 const char/string* 到 int*

Posted

技术标签:

【中文标题】无法将字符串转换为 const char/string* 到 int*【英文标题】:Cannot convert string to const char/string* to int* 【发布时间】:2017-01-22 22:28:18 【问题描述】:

首先,我想说我是一个初学者。抱歉我的愚蠢问题。

我的程序应该询问您要输入的单词数量。特别是说这个标签长度是指针标签指向单词标签的长度(可能听起来令人困惑,但英语不是我的第一语言,抱歉,我还不太了解指针)。

单词标签也应该有每个单词的准确长度,因此strlen。我做错了什么?

int il,len;
string x;
cout<<"Amount of words: ";
cin>>il;
int **t;
t=new int*[il];
for(int i=0; i<il; i++)

    cout<<"Word: ";
    cin>>x;
    len=strlen(x);
    t[i]=new string[len];
    cout<<endl;

cout<<"You wrote:"<<endl;
for(int i=0; i<il; i++)

    cout<<t[i];
    delete [] t[i];

delete[] t;

【问题讨论】:

strlen 不采用类字符串对象,而是采用指向字符串char*的常量指针 什么是标签?你的意思是数组(如表中)? tint** 类型,t[i]int* 类型。您不能将std::string* 对象分配给int*。再加上代码中的一些其他错误;您可能想浏览一些 resources 以帮助您了解 C++ 类型系统,而不是我们在这里解释的范围 你编译这个时启用了一些(全部?)警告 【参考方案1】:

strlen() 不采用类 string 对象,而是采用指向字符串 char* 的指针:

len = strlen(x); // error so correct it to:
len = x.length();

您也不能将指向整数的指针初始化为类字符串:

int **t;
t[i]=new string[len];

你真的想要一个字符串数组,但代码真的很乱,所以如果你想要这样:

int il;

cout << "Amount of words: ";
cin >> il;

string *t;
t = new string[il];

for(int i = 0; i < il; i++)

    cout << "Word: ";
    cin >> t[i]; // there's no need for a temporary string `x`; you can directly input the elements inside the loop
    cout << endl;


cout << "You wrote: " << endl;

for( int i = 0; i < il; i++)
    cout << t[i] << endl;

delete[] t;

【讨论】:

坦率地说。代码是一团糟。它应该被转储并重新启动 @EdHeal:是的,你是真的!因此我建议他/她使用此代码 std::vector&lt;std::string&gt; 可能是一个改进。 @YSC:是的,这是个好主意,但 OP 似乎没有相关背景

以上是关于无法将字符串转换为 const char/string* 到 int*的主要内容,如果未能解决你的问题,请参考以下文章

无法从“const char *”转换为“LPCTSTR”

将字符串转换为 const char* 问题 [重复]

将 Swift 字符串数组转换为 const char * const *

C++ 无法将参数从 '*type' 转换为 'const type &'

error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”

error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”