C++ 指针数组和引用调用

C++ 指针数组和引用调用,c++,pointers,C++,Pointers,我对几行简单的代码有点问题。 我使用以下行调用我的方法: char** paras = new char*; inputLength = charUtils::readParameterFromConsole(paras, paraCount, stringBeginningIndex); 该方法如下所示: int charUtils::readParameterFromConsole(char** &inputs, int &paraCount, int &strin

我对几行简单的代码有点问题。
我使用以下行调用我的方法:

char** paras = new char*;
inputLength = charUtils::readParameterFromConsole(paras, paraCount, stringBeginningIndex);
该方法如下所示:

int charUtils::readParameterFromConsole(char** &inputs, int &paraCount, 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;icout当您说
inputs[i]=part
时,您正在将指针传回堆栈分配的变量,
input
,因为
part
strtok
返回的
input
的指针


我写这篇文章时,您的代码:

int charUtils::readParameterFromConsole(char** &inputs, int &paraCount, 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() );