将char []传递给另一个函数时的奇怪输出

时间:2014-09-21 04:23:38

标签: c++ arrays function

我试图将char []传递给另一个函数,但由于某种原因,我不断得到奇怪的输出,但没有错误。我有以下方法:

void storeKey()
{
    char keyArray[10];
    cout << "Please enter 10bit key" << endl << "==> ";
    cin >> keyArray;
    storePlaintext(keyArray);
    cout << keyArray << endl;
}

void storePlaintext(char key[])
{
    char plaintextArray[8];    
    cout << "Please enter 8bit plaintext" << endl << "==> ";
    cin >> plaintextArray;

    cout << plaintextArray << endl << key[1] << endl;
    //cout << plaintextArray << endl << key << endl;
}

我应该在下一行打印出:00000000和1111111111,然后是1111111111 但我得到0000000然后&#34; c&#34; (或随机的东西)然后是111111111.为什么会发生这种情况?我应该能够通过一个像我这样没有问题的阵列吗?我需要能够将数组从函数传递给函数并使用它们内部的数据。任何帮助都感激不尽。感谢

1 个答案:

答案 0 :(得分:2)

使用std::string

#include <string>
#include <fstream>
#include <iostream>

using namespace std;

void storePlaintext(const string& key);

void storeKey()
{
    std::string keyArray;
    cout << "Please enter 10bit key" << endl << "==> ";
    getline(cin,  keyArray);
    storePlaintext(keyArray);
    cout << keyArray << endl;
}

void storePlaintext(const string& key)
{
    string plaintextArray;    
    cout << "Please enter 8bit plaintext" << endl << "==> ";
    getline(cin, plaintextArray);
    if ( key.size() > 1 ) 
        cout << plaintextArray << endl << key[1] << endl;
}

请注意std::stringstd::getline的使用,以及(const)引用传递参数。此外,检查以确保key具有多于1个字符,因为使用长度为1或更小的字符串访问key[1]是未定义的行为。