C++ 指针数组和引用调用
我对几行简单的代码有点问题。C++ 指针数组和引用调用,c++,pointers,C++,Pointers,我对几行简单的代码有点问题。 我使用以下行调用我的方法: char** paras = new char*; inputLength = charUtils::readParameterFromConsole(paras, paraCount, stringBeginningIndex); 该方法如下所示: int charUtils::readParameterFromConsole(char** &inputs, int ¶Count, int &strin
我使用以下行调用我的方法:
char** paras = new char*;
inputLength = charUtils::readParameterFromConsole(paras, paraCount, stringBeginningIndex);
该方法如下所示:
int charUtils::readParameterFromConsole(char** &inputs, int ¶Count, int &stringBeginningIndex) {
char input[BUFFER_STRING_LENGTH];
cin.getline(input, BUFFER_STRING_LENGTH);
if(strlen(input) > 0)
{
bool stringBeginning = false;
char* part = "";
string partString = "";
for(int i = 0; i < paraCount; i++)
{
if (i == 0)
part = strtok(input, " ");
else
part = strtok(NULL, " ");
inputs[i] = part;
}
} else
{
cout << "Error! No Input!" << endl;
}
cout << &inputs[0] << endl;
cout << inputs[0] << endl;
return strlen(input);
}
int-charUtils::readParameterFromConsole(char**&inputs、int¶Count、int&stringbeginingindex){
字符输入[缓冲区字符串长度];
cin.getline(输入,缓冲区字符串长度);
如果(strlen(输入)>0)
{
bool stringstart=false;
字符*部分=”;
字符串partString=“”;
for(int i=0;i cout当您说inputs[i]=part
时,您正在将指针传回堆栈分配的变量,input
,因为part
是strtok
返回的input
的指针
我写这篇文章时,您的代码:
int charUtils::readParameterFromConsole(char** &inputs, int ¶Count, int &stringBeginningIndex) {
char input[BUFFER_STRING_LENGTH];
cin.getline(input, BUFFER_STRING_LENGTH);
if(strlen(input) > 0)
{
bool stringBeginning = false;
char* part = "";
string partString = "";
for(int i = 0; i < paraCount; i++)
{
if (i == 0)
part = strtok(input, " ");
else
part = strtok(NULL, " ");
inputs[i] = part;
}
} else
{
cout << "Error! No Input!" << endl;
}
cout << &inputs[0] << endl;
cout << inputs[0] << endl;
return strlen(input);
}
同样,这是即兴代码,请纠正任何语法错误
干杯,从控制台(…)读取参数
更改值?是的,在方法的末尾,我使用一个简单的输出来检查值。所有值都是正确的,但是调用方法丢失了所有值。Paras有一些值我无法解释。是不是只有Paras
的值不正确?还是其他参数也不正确?您可以发布代码来显示readParameterFromConso的方式吗乐()
修改参数和输出值的方式?我们需要更多的信息来给你答案。你发布的代码看起来正确。尽管我很好奇你为什么使用字符**&
所有其他值都是正确的。只有段落是错误的。你可以看到上面的小版本。@otibom:因为我想引用ot她的方法,它不是同一个类的一部分。谢谢你的建议,但我不能处理它。@H3llGhost:你的意思是你需要进一步的解释吗?是的,因为我不明白为什么它在同一个类中本地有效,但在不同的类中无效。@H3llGhost:对不起,在我进一步解释之前,我昨天不得不离开。希望阿尔夫的回答是令人满意的工厂:)
#include <vector>
#include <string>
#include <sstream>
#include <stdexcept>
bool throwX( char const s[] ) { throw std::runtime_error( s ); }
typedef std::vector<std::string> StringVector;
std::string lineFromUser()
{
std::string line;
std::getline( cin, line )
|| throwX( "lineFromUser failed: std::getline failed" );
return line;
}
void getWordsOf( std::string const& s, StringVector& result )
{
std::istringstream stream( s );
std::string word;
StringVector v;
while( stream >> word )
{
v.push_back( word );
}
result.swap( v );
}
StringVector wordsOf( std::string const& s )
{
StringVector result;
getWordsOf( s, result );
return result;
}
// Some call, like
StringVector const words = wordsOf( lineFromUser() );